Ответы:
Поместите это внизу settings.php:
error_reporting(-1); // Have PHP complain about absolutely everything
$conf['error_level'] = 2; // Show all messages on your screen, 2 = ERROR_REPORTING_DISPLAY_ALL.
ini_set('display_errors', TRUE); // These lines just give you content on WSOD pages.
ini_set('display_startup_errors', TRUE);
Ресурс «Белый экран смерти» (полностью пустая страница) на drupal.org поможет вам увидеть все сообщения об ошибках, а также распространенные проблемы, которые их вызывают.
«Невидимые» ошибки
Если отчеты об ошибках отключены, вы можете получить фатальную ошибку, но ее не увидите. На производственном сайте часто отключают отчеты об ошибках. Если это так, и PHP обнаружил неисправимую ошибку, ни ошибка, ни содержимое не будут отображаться, поэтому вы получите полностью пустую страницу.
Что вы можете сделать для этого - включить отчет об ошибках PHP, чтобы он отображал сообщение на самой странице, или проверить файлы журналов (с сервера), чтобы найти ошибку. Как это сделать, объясняется ниже.
Включить отчеты об ошибках
Хотя он может быть отключен на коммерческих хостах и производственных сайтах (по уважительной причине, чтобы пользователи не видели ошибок), эти ошибки являются одним из ваших лучших инструментов для устранения неполадок. Чтобы включить создание отчетов об ошибках, временно отредактируйте файл index.php (обычно расположенный в корневом каталоге) сразу после первого открывающего тега PHP (не редактируйте фактическую информацию о файле!), Добавив следующее:
error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
Теперь вы сможете увидеть любые ошибки, которые происходят прямо на экране. Проблемы с памятью все еще могут не отображаться, но это первый шаг в процессе устранения.
Если вы используете установку с несколькими сайтами и хотите, чтобы ошибки отображались только для одного сайта, сначала проверьте имя хоста, как показано в:
if ($_SERVER['HTTP_HOST']==='some.domain.name.here') { error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); }
Если проблема возникает во время работы update.php, откройте update.php в текстовом редакторе и раскомментируйте следующую строку:
ini_set('display_errors', FALSE);
Посмотрите на журнал ошибок Apache, в Ubuntu он находится /var/log/apache2/error.log
так, что вы можете сделать:
tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
Я нашел простой способ отследить ошибки WSOD, запустив весь сайт drush
, например:
drush rs
После этого зайдите на сайт по указанному новому адресу (например 127.0.0.1:8080
), затем попытайтесь воспроизвести проблему, и вы увидите все ошибки на экране терминала. Нет необходимости перенастраивать ваш PHP, особенно в тех случаях, когда происходит display_errors
сбой (например, MAMP).
Другой хитрый способ, который я нашел, используя отладчики, например:
OS X:
sudo dtruss -fn httpd 2>&1 | grep -i error
Linux:
sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error
Примечание: измените httpd
на, php
если вы используете, drush rs
как указано выше.
Или установить XDebug
расширение PHP и сгенерировать файл трассировки ( xdebug.auto_trace=1
).
Если вы используете drush, вы можете увидеть сообщения об ошибках, используя команду drush-ws.
Я просто изменил значение переменной $ update_free_access с FALSE на TRUE и выполнил файл update.php. Это решило мою проблему.
Вы можете изменить index.php и обернуть код с помощью try / catch. Так:
try {
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();
} catch (Error $t) {
error_log('Error at Line:' . $t->getLine() . ' File: ' . $t->getFile() . ' Message:' . $t->getMessage() );
print '<div>Message: ' . $t->getMessage() . '</div>';
print '<div>File:' . $t->getFile() . '</div>';
print '<div>Line:' . $t->getLine() . '</div>';
}
Сообщение об ошибке покажет файл и строку кода, вызвавшего ошибку.