Периодические 500 ошибок от Apache, работающего на Zend Framework с несколькими виртуальными хостами - PullRequest
6 голосов
/ 03 марта 2011

Мы работали над проектом в течение нескольких месяцев без каких-либо проблем до набора последних обновлений. Сервер работает под управлением Amazon Linux AMI выпуска 2010.11.1 с Apache 2.2.16 и PHP 5.3.3. Проект разделен на несколько отдельных веток для разработчиков, работающих как виртуальные хосты, в каждой из которых есть отдельная копия всего кода, включая Zend Framework 1.11.3. Проект также включает Doctrine 2.0.1, но я не думаю, что именно в этом проблема. Я экспериментировал с APC в прошлом, но я даже не установил его прямо сейчас. Эта проблема возникает чаще всего, когда несколько пользователей обращаются к серверу в разных филиалах. Я подозреваю, что проблема может быть связана с различными версиями определенных базовых классов, которые требуются во время процесса начальной загрузки Zend Framework, но я не могу понять, в чем причина. Мы попытались заставить все ветви иметь одинаковую версию из нашего репозитория git, а затем перезапустили Apache. Это временно решает проблему, но вскоре возвращается. Все началось неделю назад, когда я просто установил ряд основных обновлений для Linux, PHP и Zend Framework. Когда проблема возникает, она даже распространяется на наш виртуальный хост phpmyadmin, который даже не имеет ничего общего с Zend Framework. Я в тупике. Ниже приведен набор ошибок, которые мы видим в журнале Apache:

[Wed Mar 02 20:32:40 2011] [error] [client 127.0.0.1] PHP Warning:  array_keys() expects parameter 1 to be array, null given in /var/www/dev/library/Zend/Loader/Autoloader.php on line 251, referer: https://foo.bar/admin/asset_manage/search
[Wed Mar 02 20:32:40 2011] [error] [client 127.0.0.1] PHP Warning:  Invalid argument supplied for foreach() in /var/www/dev/library/Zend/Loader/Autoloader.php on line 345, referer: https://foo.bar/admin/asset_manage/search
[Wed Mar 02 20:32:40 2011] [error] [client 127.0.0.1] PHP Warning:  array_key_exists() expects parameter 2 to be array, null given in /var/www/dev/library/Zend/Loader/Autoloader.php on line 194, referer: https://foo.bar/admin/asset_manage/search
[Wed Mar 02 20:32:40 2011] [error] [client 127.0.0.1] PHP Fatal error:  Class 'Zend_Config_Ini' not found in /var/www/dev/library/Zend/Application.php on line 383, referer: https://foo.bar/admin/asset_manage/search

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

Что ж, после долгих мучений по поводу этой проблемы оказалось, что проблема была вызвана изменением поведения php realpath_cache. Когда я установил realpath_cache_ttl = 0 в моем php.ini, проблема с неправильно загруженными классами исчезла.

Я не уверен, как это появилось в этих обновлениях, но я не думаю, что кеш требуется для устройства разработки, поэтому я возвращаюсь в нужное русло. На производственном сервере у меня должен быть только один экземпляр приложения, работающего на сервере Apache в любом случае (без виртуальных хостов), поэтому я мог бы использовать кеш в этом сценарии.

Если у кого-нибудь есть дополнительная информация о причине проблемы realpath_cache, я бы не стал это слышать.

3 голосов
/ 30 июня 2011

Это ошибка в PHP 5.3.2 (см. https://bugs.php.net/bug.php?id=52083 и https://bugs.php.net/bug.php?id=50027). Ошибка исправлена ​​в PHP 5.3.3.

0 голосов
/ 05 мая 2011

У нас была та же проблема с аналогичной настройкой сервера - приложение PHP, использующее Zend Framework 1.11.1 и Doctrine 2, работающее на nginx с php-fpm на экземпляре Ubuntu в облаке Amazon.После перезапуска php-fpm проблема, похоже, исчезла.

...