PHP Fatal error: cannot call overloaded function for non-object [Решено]

Если у вас на сервере с какого-то момента временами начала появляться и бесследно исчезать злобная ошибка «PHP Fatal error: cannot call overloaded function for non-object», указывающая на строку кода, которая казалось бы никакого отношения к этой ошибке не имеет, то знайте, что проблема не в версии PHP (откат до PHP 5.2 как это советуют некоторые «гуру» проблему не решит). Отключение плагинов в вашем WordPress / Joomla / Drupal также может привести только к временной победе, но ошибка обязательно вылезет вновь.

Проверьте через phpinfo(), работает ли у вас APC (opcode cache)? Эта примочка хоть и вызывает некоторый прирост производительности, но подчас способна генерировать проблемы. Так и в этом случае — периодическое появление «PHP Fatal error: cannot call overloaded function for non-object» вызвано именно неправильной работой APC.

Проще всего решить данную проблему просто отключив APC. Найдите у себя в конфигурации сервера строку

extension = apc.so

(чаще всего она находится в файле /etc/php.d/apc.ini) и закомментируйте эту строку, поставив «;» в начале строки. После чего обязательно перезапустите Apache (service httpd restart) или демон php5-fpm (service php5-fpm restart).

Нет смысла грустить об отсутствующем кэшере опкода, поскольку в PHP начиная с версии PHP5.5 встроен свой собственный кэшер опкода, так что лучше просто обновитесь до PHP5.5 и больше не грустите.

P.S. Кстати именно эта бага вызывает следующие сообщения об ошибках в WordPress:

PHP Fatal error: Cannot call overloaded function for non-object in wp-includes/class-wp.php on line 529

в строке 529 находится вызов функции wp_get_current_user(); который как бы и не должен приводить к такому сообщению.

Также известно, что в Drupal этот глюк генерирует пару ошибок:

PHP Fatal error: Cannot call overloaded function for non-object in …simplexml.php on line 607
PHP Fatal error: Class ‘JLoader’ not found in /home/…../www/libraries/loader.php on line 161

где находятся инструкции $callback($this, $args); и if(JLoader::load($class)) соответственно.

Скорее всего в других CMS ошибки будут вылетать и в других местах, но вы теперь точно знаете, что CMS тут ни при чём.

Удачи!

Отправить ответ

Оставьте первый комментарий!

Notify of
avatar
wpDiscuz