2013-05-17 2 views
1

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

Я написал тестовый сценарий, чтобы проиллюстрировать проблему, с которой сталкиваюсь.

<?php 
    function set_true() 
    { 
     apc_store("test", true); 
     var_dump(apc_fetch("test")); 
    } 

    var_dump(apc_fetch("test")); 
    set_true(); 
?> 

Когда я пытаюсь его apc.enable_cli=1, происходит следующее:

$ php test_store.php 
bool(false) 
bool(true) 
$ php test_store.php 
bool(false) 
bool(true) 

То есть, кэш, кажется, вытер между каждой сессии. Это имеет смысл в соответствии с documentation.

А когда я запускаю его без apc.enable_cli=1, происходит следующее:

$ php test_store.php 
bool(false) 
bool(false) 
$ php test_store.php 
bool(false) 
bool(false) 

который должен сказать, что кэш даже не существует на протяжении всего сценария (сохранение не работает).

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

ответ

1

apc.enable_cli означает, что он будет работать в CLI, но не означает, что он будет сохранять значения между запросами (поскольку для этого нет подходящего хранилища).

Таким образом, с apc.enable_cli он будет хранить данные во время запуска сценария. Без него он не будет хранить его вообще.

Так что, если вам действительно нужно кэширование - использовать другой механизм кэширования (Memcached/файлы/...)

+0

Просто чтобы быть ясно, это в основном означает, что CLI делает очень временный кэш для сценария и удаляет его, но производительность CGI не затрагивается (если выполняется CGI, она будет сохраняться), но нет возможности подключить кэш CGI с кешем CLI? Я просто попробовал это, разместив его и выполнив его через клиента, и он, похоже, сохраняется правильно. –

+0

@ River Tam: через какого клиента? 'APC' нуждается в некоторой общей памяти для сохранения своих данных. И я не уверен, что считаю, что это работает в «CGI». Это чисто cgi или что-то еще? – zerkms

+0

Значение клиента через браузер, обращающийся к серверу (php-скрипт, выполняемый через apache). То есть, я пытаюсь заставить APC работать немного больше, чем действительно легкая база данных, чем кеш, поэтому я хочу иметь возможность редактировать данные как с клиента, так и с сервера. –