Я пытаюсь реализовать какое-то кэширование в PHP-скрипте, который будет использоваться многими клиентами / сайтами, которые будут развернуты довольно нетехническими пользователями с использованием различных веб-хостов. Из-за нетехнического характера пользователей я бы не стал просить их настроить права доступа к файлам. Кэширование должно происходить между сеансами, поэтому использование переменных сеанса запрещено. Если бы я кодировал это в ASP, я бы использовал переменные приложения, но они не существуют в PHP (насколько мне известно)
Кто-нибудь есть какие-либо предложения о том, как это сделать?
Вот некоторые возможности, которые я рассмотрел, любые комментарии по ним будут полезны:
- Кэширование с помощью файлов в системных временных папках - я мог бы использовать sys_get_temp_dir () (или некоторую аналогичную функцию на PHP4), чтобы помочь найти такую папку. Недостатком здесь является то, что он, вероятно, не будет работать на хостах, использующих ограничение openbase_dir
- На каком-то веб-сайте, на котором я смотрел, упоминалось, что PHP заставляет все пользовательские сеансы использовать одно и то же состояние сеанса, заставляя переменные сеанса действовать как переменные сеанса. Конечно, я не могу найти этот пост сейчас ... Это кажется страшным в любом случае. (Я обновлю этот вопрос ссылкой на этот пост, как только найду его снова)
- Использовать стороннее хранилище данных, такое как Amazon Simple Storage Service - похоже, излишнее
- Кэшировать данные на сервере, которым я управляю, и заставлять клиента загружать оттуда новые данные при каждом обращении.
Еще раз, любые комментарии к этим идеям или любые новые будут оценены.
ОБНОВЛЕНИЕ: Я пытался использовать session_id () для использования общего состояния сеанса, но это не работает. Каждый сеанс поддерживает свой собственный «GlobalCache», есть идеи почему?:
// This code doesn't work, but the similar code in my answer does!
function test() {
if (!$_SESSION['session_count']) $_SESSION['session_count'] = 0;
$_SESSION['session_count']++;
$count = get_cache( 'count' );
print "pre application count: $count<br>";
if ( !$count )
$count = 0;
$count++;
print "session_id: " . session_id() . "<br>";
print "post application count: $count<br>";
print "session_count: " . $_SESSION['session_count'] . "<br>";
set_cache('count', $count);
}
function set_cache( $name, $value ) {
$old_session = session_id();
print "old_session (set): $old_session<br>";
session_id("GlobalCache");
print "new_session (set): " . session_id() . "<br>";
$_SESSION[$name] = $value;
session_id( $old_session );
}
function get_cache( $name ) {
$old_session = session_id();
print "old_session (get): $old_session<br>";
session_id("GlobalCache");
print "new_session (get): " . session_id() . "<br>";
$value = $_SESSION[$name];
session_id( $old_session );
return $value;
}
session_start();
test();
ОБНОВЛЕНИЕ: некоторые предлагали использовать memcached, что на самом деле является отличным решением для некоторых, но, поскольку у меня нет контроля над средой конечного сервера, это не вариант. Идея состоит в том, чтобы иметь сценарий, с помощью которого люди могли бы просто подключиться по FTP к учетной записи общего хостинга, которая просто работает из коробки.
ОБНОВЛЕНИЕ: кто-то предложил создать мою собственную папку кэша с помощью скрипта, но разве мне не нужно было создавать такую папку внутри папки, у которой уже были разрешения на запись?
ОБНОВЛЕНИЕ, НАЙДЕНО РЕШЕНИЕ: В итоге я выяснил проблемы в моем глобальном сценарии сеанса и опубликовал свой собственный ответ на этот счет. Спасибо всем за помощь.