PHP "apc_store" и "apc_fetch" не работают должным образом - PullRequest
7 голосов
/ 04 ноября 2010

Я пытался использовать APC, но, похоже, он не работает так, как я ожидал.

* * 1002 file1: * * 1003
$bar = 'BAR';
apc_store('foo', $bar, 3600);
var_dump(apc_fetch('foo'));           // It works here. Displays BAR

file2:

var_dump(apc_fetch('foo'));

Когда я выполняю file2 в течение нескольких секунд, он возвращает false вместо 'BAR', то есть данных, хранящихся в кэше.

Ответы [ 2 ]

4 голосов
/ 20 июля 2011

Работает нормально :) - если вы помните, что каждый скрипт php, выполняемый из командной строки, использует свой собственный кеш, поэтому вы не сможете получить доступ к данным, сохраненным script1 внутри script2. (вы не сможете получить к нему доступ при более позднем запуске script1, так как он очищается после завершения сценария)

Эти кеши также отделены от кеша, который вы, скорее всего, хотите использовать, и это кеш php-скриптов, выполняемых через ваш веб-сервер.

Так что, если у вас есть эти тесты выше, сохраненные в вашем webroot, чтобы вы могли получить доступ, например, http://localhost/file1.php, тогда http://localhost/file2.php

Это будет работать как ожидалось.

Это также означает, что вы не можете очистить кэш APC веб-сервера из командной строки. Код очистки кеша (пользовательский кеш или кэш кода операции) должен выполняться через ваш веб-сервер. Будет ли это wget из оболочки или file_get_contents () из php cli - вам решать на ваш вкус и обстоятельства.

0 голосов
/ 17 мая 2011

Установите это (http://svn.php.net/viewvc/pecl/apc/trunk/apc.php?view=markup) в защищенной области сервера, настройте его, как описано в комментариях, и это должно упростить диагностику проблем кэширования APC ... или, по крайней мере, даст вам лучшее понимание того, почему что-то работает не так, как хотелось бы.

...