От автора: приветствую вас, дорогие читатели.… Откуда шишка на лбу? Это я вчера грабли нашел на даче, которые потерял в прошлом году. В общем, все банально: сам забыл – сам наступил. Хорошо, что вывод ошибок PHP происходит не с помощью граблей. Хотя на этом тоже можно набить замечательные «шишки»!
Если ошибки не видны?
Если при выполнении кода у вас не отображаются ни предупреждение (warning), ни ошибки (errors), ни исключения (exception), то значит вы талантливый разработчик. Но при условии, что написанные вами программы работают. Хотя может быть и другая причина, почему все идет так гладко – вы забыли включить ошибки PHP. Точнее, их вывод. Это можно сделать несколькими способами:
В настройках веб-сервера Apache (файл .htaccess).
В настройках языка (php.ini).
Напрямую в коде.
Следует отметить, что хостеры, предоставляющие виртуальное пространство, часто отключают вывод ошибок. Это делается для обеспечения безопасности ресурсов, размещенных на данной площадке. Поэтому вам повезло, если к вашему сайту подключен Apache. Тогда можно, прописав несколько строк, активировать отображение всех errors и warning. Для этого зайдите в .htaccess (если нет, то создаем) и прописываем следующие строки:
1 2 |
php_flag display_errors on php_value error_reporting -1 |
В PHP, чтобы включить вывод ошибок используются две директивы:
display_errors – включает или отключает отображение сообщений об ошибках.
error_reporting – устанавливает, какие именно «баги» следует выводить. Задается числом или константой.
Больше информации по принимаемым значениям констант можно «почерпнуть» из технической документации к языку. Благо, PHP хорошо описан.
А как же Денвер?
Не волнуйтесь, я не забыл о нем. В «наборе для джентльменов» включение отображения «багов» настраивается в php.ini. Он является главным средством конфигурации языка в этом и других подобных программных наборах.
Спасибо создателям Denwer! Они все правильно продумали, и поэтому заранее активировали все основные (нужные) параметры. В том числе и «трансляцию» сообщений об ошибках в программном коде.
На следующем снимке обозначены настройки и их значения, которые должны быть прописаны в файле конфигурации языка, чтобы включить отображение ошибок PHP.
Явная активация
Если не уверены, что хостер включил отображение «багов». Или нужно «перекрыть» параметры, заданные в конфигурационных файлах, тогда используйте явную активацию в коде скрипта.
Для этого используется все те же директивы error_reporting и display_errors. Но в программном коде PHP вывод ошибок на экране задается с помощью специальной функции ini_set(). Она служит для изменения значений параметров (переменных и директив), заданных в файле php.ini. Пример использования:
1 |
ini_set('display_errors', 1); |
Таким же образом задается и значение display_errors.Кроме этого для данной директивы в PHP существует специальная одноименная функция. В качестве входных параметров она принимает перечисления типов ошибок, которые нужно выводить на экран при выполнении кода скрипта.
С помощью данной функции в php ini типы выводимых ошибок задаются несколькими способами. Но легче всего (и более понятно по смыслу) использовать предустановленные (интегрированные в ядро языка) константы.
Например, активируем отображение ошибок, допущенных в именах или не проинициализированных в программном коде переменных:
1 |
error_reporting(E_NOTICE); |
Вывод сообщений обо всех типах «багов»:
1 |
error_reporting(E_ALL); |
Также в PHP можно отключить вывод ошибок. Например:
1 |
error_reporting(0); |
Также можно запретить отображение ошибок для конкретной строки кода. Для этого используется «собака». Точнее символ «@». Пример:
1 |
$v = @$var[$n]; |
Немного попрактикуемся
Как включить показ всех ошибок в PHP, мы уже с вами разобрались. Но что-то получается сегодня много теории. Давайте разбавим ее практической составляющей. Для начала ошибемся при написании кода, а затем отключим отображение сообщения об ошибке.
Создадим почти бесконечный цикл. Он будет «крутится» очень долго, и время ожидание выполнения кода превысит установленный в настройках лимит – полминуты:
1 2 3 4 5 6 7 8 |
<?php while($i<300000000) { $i++; } echo "Цикл крутится:".$i." раз"; ?> |
В результате мы получаем сообщение о фатальной ошибке типа «шеф, все пропало» :).
Теперь отключим отображение всех программных «неровностей». Сверху предыдущего кода добавьте строчку:
1 |
error_reporting(0); |
В результате мы не получили уведомление об ошибке, но прекращение программы все равно состоялось. Поэтому мы и получили пустой экран.
Сегодня мы научились включать ошибки в PHP htaccess и другими способами, с помощью которых вы сможете рассмотреть в коде все «забытые грабли».