УрокВывод ошибок PHP на экран

При работе с сайтом каждый разработчик сталкивался с ситуацией, когда при включении модуля, добавления своего кода или другого изменения на сайте, возникал так называемый WHITE SCREEN OF DEATH (белый экран смерти), который обычно вызван ошибкой PHP. Первое действие разработчика, естественно, откатить изменения, повлёкшие за собой эту ошибку. Но ведь ошибку-то исправлять надо, а значит, надо посмотреть что именно является причиной её возникновения.

Хорошо, если у разработчика есть возможность посмотреть логи апача. Но тут возникают трудности: не каждый хостер их ведёт, да и не у каждого программиста есть к ним доступ. В конце концов, чтобы их посмотреть надо будет лезть на сервер. Но ведь все программисты ленивые, а значит, надо искать более простое решение. И этим решением является прямой вывод ошибок на экран.

Я не беру в расчёт страницу в друпале, позволяющую выводить ошибки на экран (admin/settings/error-reporting), т.к. от белого экрана она не спасёт. Она выводит ошибки, ломающие модули,а не в целом сайт. Т.е. если забыть поставить (например) isset для переменной, которая может быть не определена - то ошибка будет показана на экране. Зато если забыть поставить точку с запятой после выполнения операции, то эту ошибку друпал уже не выведет, а вы увидите белый экран.

Включить вывод ошибок можно несколькими способами.

Способ 1. Включение вывода ошибок на экран через php.ini

Если вы имеете доступ (ну а вдруг) к серверу, то в конфигурационном файле php.ini найдите параметр error_reporting и установите его значение в E_ALL.

error_reporting = E_ALL

Способ 2. Включение вывода ошибок на экран через .htaccess

В корне Друпала имеется файл .htaccess, который регулирует процессы загрузки страниц. Чтобы включить вывод сообщений, откройте его и добавьте следующие две строки:

php_flag display_errors on
php_flag display_startup_errors on

Способ 3. Включение вывода ошибок на экран через index.php

Опять затронем файлы в корне Друпала, но на этот раз index.php. Здесь для вывода сообщений надо перед строкой с подключением bootstrap.ini добавить error_reporting(7):

error_reporting(7);
require_once './includes/bootstrap.inc';

Способ 4. Включение вывода ошибок на экран через settings.php

Сразу скажу, этот способ действует только для Drupal 7. В папке sites/default/ есть файл settings.php. Откройте его и добавьте вот эти строки:

error_reporting(-1);
$conf['error_level'] = 2;
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

Комментарии

Аватар пользователя Тайный поклонник
Тайный поклонник написал:

В способе 3 опечатка в слове "Здесь". ;-)
Хорошая статья!

26.08.2011 09:29
Аватар пользователя Spleshka
Spleshka написал:

Спасибо, исправил

28.08.2011 16:08
Аватар пользователя Тайный поклонник
Тайный поклонник написал:

спасибо. оченьнужная статья.

07.09.2011 13:32
Аватар пользователя Cаня
Cаня написал:

Спасибо, особенно интересно про 4й способ было.

04.01.2012 12:54
Аватар пользователя Pazitiff
Pazitiff написал:

Спасибо, то что нужно, а можно ли как то включить отчёт о неопределённых переменных например?

16.01.2013 15:42
Аватар пользователя Юрий
Юрий написал:

Здраствуйте!! если скрипту требуется сервер,ставиш на хостинг, выдаёт ошибки мускула,ошибка типа не верный аргумент,как исправить скрипт для хостинга????? плизз

13.05.2013 00:56
Аватар пользователя elstrana.ru
elstrana.ru написал:

PHP ошибка парсинга - белый экран (решено!)

мне удалось найти причину ошибку парсинга, когда PHP 5.6 аварийно прекращает работу, не выдавая никаких сообщений на экран или в лог.
она возникает при смешанном коде HTML + PHP, когда внутри любой конструкции из фигурных скобок вставлен блок HTML кода, причём открывающая и закрывающая фигурная скобка находится внутри РАЗНЫХ блоков кода PHP, начинающихся различными открывающими тегами: <code>
<?
</code> и <code>
<?php
</code>
пример кода, вызывающего аварийное завершение работы PHP:
<code>
<?php if (TRUE) { ?>
<p>тут код HTML</p>
<? } ?>
</code>
никакие манипуляции с директивами, управляющими отображением ошибок, вроде таких, не помогают:
<code>
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
ini_set('display_errors', 1);

</code>P.S. старые версии PHP работают без проблем

11.01.2016 13:37

Комментировать