PHP에서 해시 맵 (PHP의 연관 배열)을 구현하려고합니다. PHP에서 응용 프로그램과 같이 사용할 수 있습니다. 즉, 응용 프로그램 컨텍스트에 저장합니다. 프로그램이 끝나면 손실되지 않아야합니다. 어떻게 PHP에서이 작업을 수행 할 수 있습니까?어플 리케이션 컨텍스트에서 hashmap PHP
감사합니다, 이것에 대한
PHP에서 해시 맵 (PHP의 연관 배열)을 구현하려고합니다. PHP에서 응용 프로그램과 같이 사용할 수 있습니다. 즉, 응용 프로그램 컨텍스트에 저장합니다. 프로그램이 끝나면 손실되지 않아야합니다. 어떻게 PHP에서이 작업을 수행 할 수 있습니까?어플 리케이션 컨텍스트에서 hashmap PHP
감사합니다, 이것에 대한
젠드 버전의 PHP를 사용하고 있다면 쉽습니다.
데이터를 직렬화 할 필요가 없습니다.
내용 만 캐시 할 수 있습니다. 파일 핸들과 같은 리소스는 할 수 없습니다. true/false를 저장하려면 1,035를 사용하십시오. 그러면 캐시 실패를 ===
으로 결과와 구별 할 수 있습니다.
스토어 :
zend_shm_cache_store('cache_namespace::this_cache_name',$any_variable,$expire_in_seconds);
검색 :
$any_variable = zend_shm_cache_fetch('cache_namespace::this_cache_name');
if ($any_variable === false) {
# cache was expired or did not exist.
}
를 오래 살았 데이터의 경우 다음을 사용할 수
zend_disk_cache_store();zend_disk_cache_fetch();
를 젠드이없는 사람들을 위해, 위의 해당 APC 버전 :
저장소 :
apc_store('cache_name',$any_variable,$expire_in_seconds);
은 검색 :
$any_variable = apc_fetch('cache_name');
if ($any_variable === false) {
# cache was expired or did not exist.
}
언급 다른 방법을 사용하지 마십시오. 공유 메모리를 사용할 수없는 경우 데이터를 디스크로 serialize/unserialize 할 수 있습니다. 물론 공유 메모리는 훨씬 더 빠르고 젠드에 대한 좋은 점은 당신을 위해 동시성 문제를 처리하고 네임 스페이스 수있다 :
스토어 :
file_put_contents('/tmp/some_filename',serialize($any_variable));
가 검색 :
$any_variable = unserialize(file_get_contents('/tmp/some_filename'));
편집 : 처리하기 위해 동시성 문제는 스스로 해결할 수 있습니다. 가장 쉬운 방법은 잠금을 사용하는 것입니다. 자물쇠가 존재하고 자물쇠를 채우는 동안이 가짜 코드에서 경쟁 조건의 가능성을 여전히 볼 수 있지만, 그 점을 알 수 있습니다.
사이비 코드 :
while (lock exists) {
microsleep;
}
get lock.
check we got lock.
write value.
release lock.
PHP 자체에는 '응용 프로그램 컨텍스트를'이 없습니다. 해결 방법이 있습니다 (즉, 파일이나 공유 메모리에 물건을 저장하는 것), 그렇지 않으면 PHP 스크립트가 끝날 때까지 아무 것도 살아남지 못합니다. – zneak