Трудноуловимая ошибка с Zend_Loader_Autoloader::$_instance и доступом к контантам класса.
Апрель 30, 2011 | ITшное, код | Модные словечки zf, баги, конфиг, ошибки | 1 мнение »Продолжаю серию увлекательных особенностей ZF и PHP в общем.
Итак, если по неизвестной закономерности у вас возникает ошибка Access to undeclared static property: Zend_Loader_Autoloader::$_instance или же происходит фатал эррор с ошибкой «обращение к несуществующей переменной», а в коде это выглядит типа как self::MYCONST то эта запись для вас.
В общем написал я недавно класс Zend_Session_SaveHandler_Memcached что бы использовать его как сторэдж для сохранения сессий.
И поначалу вроде как все работало нормально, но потом по неизвестной закономерности начала появляться ошибка что скрипт обращается к несуществующей переменной. Естественно, константа в классе объявлена. Замена self на Zend_Session_SaveHandler_Memcached результата не дало, ровно как и обновление пхп со всеми модулями. При это еще после того как скрипт меняется, страница грузится нормально, без ошибок, а последующие загрузки вызывают эту ошибку.
И еще более загадочно, без установленной закономерности, раз на сколько то вызовов появляется ошибка, озвученная выше.
В итоге установил что проблема в параметре apc.cache_by_default который задается в php.ini и который был включен на этом сервере, а на других (на которых и ошибки этой не было) данного парамера пхпинфо вообще не возвращал. Установка параметра в 0 соответственно решило проблему.
Такой день.
apc.cache_by_default разве не отключает кэширование op-кода? Т. е. кэшироваться будут только подходяшие под фильтры файлы, и если фильтры не задать, то apc вообще не даст прироста в производительности.
Более правильное решение — http://stackoverflow.com/questions/7749198/getting-apc-to-play-nice-with-spl-autoload-register
Вообще не понятная тема с этим register_shutdown_function(‘session_write_close’);, пока не узнал о нем — у меня еще была трудноуловимая ошибка с неисчезающим последним сообщением во FlashMessenger.