Что означает ошибка «PHP Fatal error: не может вызвать перегруженную функцию для не-объекта»?

У меня есть сайт WordPress, запущенный на хосте GoDaddy Linux. Ошибка PHP Fatal error: Cannot call overloaded function for non-object in wp-includes/class-wp.php on line 529 , происходит случайным образом, как правило, в ответ на запрос POST.

  • Версия WordPress: 3.8
  • Версия PHP: 5.4.23

Строка 529 файла wp-includes/class-wp.php является телом следующей функции в классе WP:

 function init() { wp_get_current_user(); } 

Похоже, что ошибка связана с наличием плагина WooCommerce . Я не видел ошибку, когда плагин отключен.

К сожалению, удаление WooCommerce не является вариантом, поэтому мне нужно выяснить, как срабатывает ошибка и обеспечить решение. Проблема в том, что я не знаю, что искать.

Я хочу понять, что вызывает ошибку, подобную приведенной выше в общем случае.

  • Может ли кто-нибудь представить пример PHP-кода, который генерирует такую ​​ошибку? или
  • объяснение того, почему это происходит?

Я надеюсь, что смогу использовать эту информацию, чтобы найти аналогичную проблему в исходном коде WooCommerce.

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

Вопрос в SO о той же ошибке в другом приложении имеет ответ, указывающий на то, что проблема вызвана перегрузкой сервера. Я не думаю, что это так. Мы не получаем слишком много трафика.

Другой вопрос в WordPress SE предлагает две возможные причины. Либо проблема связана с альтернативным PHP-кэшем (APC), либо проблема вызвана плагином. К сожалению, никто не предлагает реальных решений или конкретных причин.

Мой случай похож на тот, который представлен в вопросе выше: у меня включен APC (в настоящее время мы пытаемся получить помощь от GoDaddy, чтобы отключить его), и мои тесты предполагают, что WooCommerce несет определенную ответственность.

Я ценю вашу помощь.

Перейдите в корневой каталог и создайте файл php.ini и напишите следующее: extension = apc.so

и сохранить.

Тема Тема WordPress имела эту проблему.

Я смог решить это для отдельных сайтов, добавив php_flag apc.cache_by_default Off в .htaccess

Мы обнаружили, что это связано с модулем APC для Apache. Чтобы решить эту проблему, просто отредактируйте php.ini, чтобы раскомментировать модуль apc, чтобы он читал

 extension=apc.so 

в

 ;extension=apc.so 

Это решит проблему.

Некоторое время у меня был белый экран смерти. До этого связана проблема -PHP Неустранимая ошибка: нельзя перегружать функцию для не-объекта в wp-includes / class-wp.php в строке 529. Эта проблема была решена путем обновления моей учетной записи godaddy.

Как упоминалось выше, проблема с белым экраном может быть либо плагином, либо APC. Самый быстрый способ определить, является ли это плагином, – НЕ деактивировать их все, а затем повторно активировать один за другим, а скорее деактивировать и повторно активировать все сразу – плагин вызывает проблему с возвратом ошибки.

Тем не менее, я хотел сохранить плагин, поэтому я связался с Godaddy, который легко отключил APC.

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