Есть ли способ хранить небольшие данные в оперативной памяти с помощью PHP, чтобы я мог иметь доступ к данным между разными сеансами вместо их регенерации. Что-то похожее на memcached (у меня нет доступа к memcahced). Мое текущее решение - просто сохранить данные в файле.
Как я могу хранить данные в оперативной памяти с помощью PHP?
Ответы (4)
APC?
Он работает иначе, чем memcached; в memcached вы можете получить доступ к данным с разных языков (c, python и т. д.), в то время как APC работает только для PHP.
ИЗМЕНИТЬ Вы уверены, что APC установлен правильно? Вы добавили extension=apc.so
в свой php.ini? И перезапустить apache (я предполагаю, что вы на ламповом сервере с apache2)? Что вы phpinfo();
говорите об APC?
Это простой тест, который отлично работает для меня:
<?php
/*
* page.php
* Store the variable for 30 seconds,
* see http://it.php.net/manual/en/function.apc-add.php
* */
if(apc_add('foo', 'bar', 30)){
header('Location: page2.php');
}else{
die("Cant add foo to apc!");
}
<?php
/*
* page2.php
* */
echo 'foo is been set as: ' . apc_fetch('foo');
p.s: я предпочитаю использовать apc_add
, а не apc_store
, но единственная разница между ними заключается в том, что apc_add не перезаписывает переменную, но произойдет сбой, если ее вызвать дважды с одним и тем же ключом:
Сохраните переменную, используя это имя. ключи уникальны для кеша, поэтому попытка использовать apc_add() для хранения данных с уже существующим ключом не перезапишет существующие данные и вместо этого вернет FALSE. (Это единственная разница между apc_add() и apc_store().)
Это дело вкуса/задачи скрипта, но пример выше работает и с apc_store.
Вы всегда можете использовать базу данных в памяти для сохранения данных. Хотя, возможно, перебор.
Я предполагаю, что вы находитесь на каком-то общем сервере.
memcached
или другое решение для кэширования действительно единственный способ сделать это.
Сеансы, наиболее известный метод сохранения данных на страницах PHP, работают на основе файлов. Вместо этого вы можете изменить обработчик сеанса на базу данных, но это также не на основе оперативной памяти.
Насколько я вижу, без изменения вашей системы на корневом уровне (например, для установки memcached или хранения файлов сеанса на RAM-диске) это невозможно.
Создайте файл в /dev/shm
, и он будет храниться в памяти до тех пор, пока машина не будет перезагружена. Это может быть или не быть быстрее, чем использование любого старого файла, в зависимости от вашего шаблона использования.