2012-05-30 3 views
5

PHP에서 해시 맵 (PHP의 연관 배열)을 구현하려고합니다. PHP에서 응용 프로그램과 같이 사용할 수 있습니다. 즉, 응용 프로그램 컨텍스트에 저장합니다. 프로그램이 끝나면 손실되지 않아야합니다. 어떻게 PHP에서이 작업을 수행 할 수 있습니까?어플 리케이션 컨텍스트에서 hashmap PHP

감사합니다, 이것에 대한

+1

PHP 자체에는 '응용 프로그램 컨텍스트를'이 없습니다. 해결 방법이 있습니다 (즉, 파일이나 공유 메모리에 물건을 저장하는 것), 그렇지 않으면 PHP 스크립트가 끝날 때까지 아무 것도 살아남지 못합니다. – zneak

답변

1

젠드 버전의 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. 
+0

프레임 워크를 사용하고 있지 않습니다. 어떻게 프레임 워크를 사용하지 않고 이것을 할 수 있습니까? – cldy1020

+0

프레임 워크는 zend PHP 스택에서 별도로 구현됩니다. 나는 어떤 프레임 워크도 사용하지 않는다. –

+0

죄송합니다. Zend 스택이 없습니다. 공유 메모리 또는 APC (Alix Axel에서 언급 한대로)를 사용하면 동시성 문제가 어떻게 처리됩니까 – cldy1020

1

당신이 사용할 수있는 APC 또는 similars는 데이터는 공유 메모리에서 사용할 수있을 것입니다했습니다.

물론 서버 재시작 사이에는 이것이 유지되지 않는다는 점에 유의하십시오.

+0

[APC] (http://www.php.net/manual/en/book.apc.php)와 [공유 메모리] (http://www.php.net/manual)의 주요 차이점은 무엇입니까? /en/ref.shmop.php)? – cldy1020