Відповіді:
Помістіть це внизу 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).
Інший хитрий спосіб я знайшов, використовуючи налагоджувачі, наприклад:
ОС 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>';
}
Повідомлення про помилку покаже файл та рядок коду, який спричинив помилку.