УрокВывод ошибок 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);
- Spleshka
- 25.08.2011
- 101614
Комментарии
В способе 3 опечатка в слове "Здесь". ;-)
Хорошая статья!
Спасибо, исправил
спасибо. оченьнужная статья.
Спасибо, особенно интересно про 4й способ было.
Спасибо, то что нужно, а можно ли как то включить отчёт о неопределённых переменных например?
Здраствуйте!! если скрипту требуется сервер,ставиш на хостинг, выдаёт ошибки мускула,ошибка типа не верный аргумент,как исправить скрипт для хостинга????? плизз
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 работают без проблем
Комментировать