После переезда на другой веб-сервер столкнулся с проблемой — при добавлении новой публикации в WordPress, когда нажимал кнопку «Опубликовать», появлялась белая (пустая) страница.

Адрес в веб-браузере был вида сайт/wp-admin/post.php. И при этом, кстати, сама публикация размещалась, текст не терялся. Уйти с этой белой страницы можно было лишь кнопкой веб-браузера «Назад».

Порылся немного в интернете. Решения не нашёл, но встретилось обсуждение форума, где у человека в точности аналогичная проблема. Может быть, он не одинок и есть другие. В общем, у себя я проблему решил и теперь вот пишу про этом, вдруг кому поможет.

Решение

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

Обычно для каждого сайта на хостинге пишутся два лога: сайт_access.log и сайт_error.log. Нас интересует второй.

У меня в логе поочерёдно обнаружилось две проблемы.

Во-первых, была опечатка (пропущена буква) в названии функции в собственном плагине, соответственно PHP не мог её обработать. Кусок кода не столь существенен, но тем не менее, ошибку я сразу поправил.

2015/02/09 09:10:28 [error] 1936#0: *797098 FastCGI sent in stderr: «PHP message: PHP Fatal error: Call to undefined function mb_srlen() in /var/www/…/wp-content/plugins/…autopost.php on line 51» while reading response header from upstream, client: 176.*.*.50, server: d1mon.com, request: «POST /wp-admin/post.php HTTP/1.1», upstream: «fastcgi://unix:/var/run/php5-fpm.sock:», host: «d1mon.com», referrer: «https://d1mon.com/wp-admin/post-new.php»

Во-вторых, в этом же плагине использовалась функция PHP, модуль для которой не был установлен на веб-сервере. Такое бывает при смене хостинга, что-нибудь забудешь, не установишь сразу.

2015/02/09 09:29:55 [error] 1937#0: *800777 FastCGI sent in stderr: «PHP message: PHP Fatal error: Call to undefined function curl_init() in /var/www/…autopost.php on line 228» while reading response header from upstream, client: 176.*.*.50, server: d1mon.com, request: «GET /wp-admin/admin-ajax.php?action=…&post_id=..HTTP/1.1», upstream: «fastcgi://unix:/var/run/php5-fpm.sock:», host: «d1mon.com», referrer: «https://d1mon.com/wp-admin/post.php?post=…&action=edit»

Установка curl_init на Debian — это всего одна команда:

apt-get install php5-curl

Один из вариантов работы моего плагина — это автоматически, при размещении новой публикации. При выполнении кода PHP возникали ошибки, т.к. были неизвестные функции, что и выливалось в итоге в белый экран.

Конечно, в вашем случае ошибки будут свои. Может быть тоже не будет каких-то функций, а может вообще что-то другое. Главное, что проблему можно выявить, заглянув в лог. Ну а далее, даже если вы сами не знаете решение, уже ничего сложного. Благо, теперь вам известно, что нужно искать.