Сделать ZVAL постоянным в SAPI?

ZVAL обычно создается с помощью emalloc, поэтому он уничтожается в конце запроса страницы. Есть ли способ взять существующий ZVAL и сохранить его в SAPI (эквивалент pemalloc)? Как насчет создания ZVAL с pemalloc?

В идеале то, что я хотел бы сделать (в коде PHP) это:

class Object
{
    public $foo;
}

if(!($object = persist("object")))
{
   $object = persist("object", new Object());
}

$object->foo[] = "bar";

print count($object->foo);

На каждый запрос count вернул бы +1 (при условии, что каждый раз используется один и тот же "рабочий" PHP - я использую PHP-FPM).

2 ответа

Решение

Вы в основном описываете http://lxr.php.net/opengrok/xref/PHP_5_3/ext/sysvshm/sysvshm.c#242

Самый близкий, который вы можете получить без дублирования функциональности, которая уже есть в shm, это https://github.com/flavius/php-persist. Подвох: в prefork/ многопроцессорном SAPI (например, в apache) разные запросы от одного и того же клиента могут заканчиваться в разных процессах, и поэтому вы увидите разные данные (попробуйте это в Linux + Firefox с жестким обновлением каждый раз в браузере).

Примечание: это незавершенный процесс, в настоящее время он содержит только целое число. Добавление массива должно быть тривиальным. Патчи приветствуются. Это все еще нуждается в части десериализации, и на самом деле использовать persist()Первый параметр

zend_object не может быть постоянным, поэтому вы не можете этого сделать. расширения, такие как APC, сериализуют объект в память.

Другие вопросы по тегам