Общая переменная теряется через несколько часов - PullRequest
1 голос
/ 22 февраля 2012

Я использую функции shm_ для предоставления общего массива моему API.В массиве хранятся данные клиента, которые помогают регулировать поступающие запросы (ограничение скорости и т. Д.). Я запускаю PHP 5.2.6-1 с suhosin patch

. Вот код, который на самом деле может быть полезен для тех, кто ищет код длясоздавать / читать / записывать / хранить данные совместно используемой памяти в PHP.

$shm_key=ftok(__FILE__, 'S' ); 
$data=shm_attach($shm_key,500000);
$ar=shm_get_var($data,"variable");
if ($ar === FALSE))
{
// this should rarely ever happen !
// recreate empty arry
}
//...
// reading and changing the $ar array contents
//...
shm_put_var($data,"variable",$ar);
shm_detach($data);

Сериализованные переменные данные редко бывают больше, чем 10-11 КБ, поэтому 500 КБ должно быть достаточно свободного места.В общей сложности 10 000–50 000 вызовов php-скриптов в час.

($ ar === FALSE) выполняется 4-5 раз в день, что приводит к полной потере всех данных регулирования.Я принимал это поведение годами, но все же хотел бы, чтобы оно было решено.

Я предполагаю, что это либо ошибка в shm_, либо состояние гонки при записи / чтении, и несколько клиентов вызывают скрипт одновременномомент.

...