Как отображать ошибки PHP и включать отчеты об ошибках

Ошибки PHP и отчеты об ошибках - это то, чего многие разработчики, плохо знакомые с языком, могут сначала упустить. Это связано с тем, что на многих установках веб-серверов на основе PHP - ошибки PHP могут подавляться по умолчанию. Это означает, что никто не видит и даже не знает об этих ошибках.

По этой причине рекомендуется знать, где и как их включить, особенно для вашей локальной среды разработки. Это поможет вам заблаговременно обнаружить ошибки в вашем коде.

Как показать ошибки PHP

Если вы погуглите "ошибки PHP", то одним из первых результатов, которые вы увидите, будет ссылка на документацию по функции error_reporting.

Эта функция позволяет вам как установить уровень отчетов об ошибках PHP, когда ваш скрипт PHP (или набор скриптов) работает, так и получить текущий уровень отчетов об ошибках PHP, как определено вашей конфигурацией PHP.

Функция error_reporting принимает один параметр, целое число, которое указывает , какой уровень отчетов , чтобы позволить. Ничего не передавая в качестве параметра, просто возвращается текущий установленный уровень.

Существует длинный список возможных значений, которые вы можете передать в качестве параметра, но мы рассмотрим их позже.

На данный момент важно знать, что каждое возможное значение также существует как предопределенная константа PHP. Так, например, константа E_ERROR имеет значение 1. Это означает, что вы можете либо передать 1, либо E_ERROR функцию error_reporting, и получить тот же результат.

В качестве быстрого примера, если мы создадим php_error_test.php файл сценария PHP, мы сможем увидеть текущий установленный уровень сообщения об ошибках, а также установить его на новый уровень.

<?php
// echo the current error reporting level
echo error_reporting();
<?php
// report all Fatal run-time errors.
echo error_reporting(1);

Конфигурация отчетов об ошибках

Такой error_reporting способ использования функции удобен, если вы просто хотите увидеть любые ошибки, связанные с фрагментом кода, над которым вы сейчас работаете.

Но было бы лучше контролировать, о каких ошибках сообщается в вашей локальной среде разработки, и регистрировать их где-нибудь в логическом месте, чтобы иметь возможность просматривать во время написания кода. Это можно сделать внутри php.ini файла инициализации (или ) PHP.

Файл php.ini отвечает за настройки всех аспектов поведения PHP. В нем вы можете установить такие вещи, как объем памяти, который нужно выделить для PHP-скриптов, разрешить загрузку файлов и какой error_reporting уровень (уровни) вы хотите для своей среды.

Если вы не уверены, где находится ваш php.ini файл, один из способов узнать это - создать PHP-скрипт, который использует функцию phpinfo. Эта функция выведет всю информацию, относящуюся к вашей установке PHP.

<?php
phpinfo();

Как вы можете видеть из phpinfo, текущий php.ini файл находится по адресу /etc/php/7.3/apache2/php.ini.

Найдя php.ini файл, откройте его в любом редакторе и найдите раздел «Обработка ошибок и ведение журнала». Вот где начинается самое интересное!

Директивы сообщения об ошибках

Первое, что вы увидите в этом разделе, - это раздел комментариев, который включает подробное описание всех констант уровня ошибки. Это здорово, потому что вы будете использовать их позже, чтобы установить уровни отчетов об ошибках.

К счастью, эти константы также задокументированы в интерактивном руководстве по PHP для удобства использования.

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

; Common Values:
;   E_ALL (Show all errors, warnings and notices including coding standards.)
;   E_ALL & ~E_NOTICE  (Show all errors, except for notices)
;   E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)
;   E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT

Наконец, внизу всех комментариев указано текущее значение вашего error_reporting уровня. Для локальной разработки я предлагаю установить его E_ALL, чтобы видеть все ошибки.

error_reporting = E_ALL

Обычно это одна из первых вещей, которые задаются при настройке новой среды разработки. Таким образом мы увидем все сообщения об ошибках.

После директивы error_reporting вы можете установить несколько дополнительных директив. Как и раньше, файл php.ini включает описания каждой директивы. Ниже краткое описание самых важных.

Директива display_errors позволяет переключать выходы ли PHP ошибки или нет. Обычно у меня установлено значение «Вкл.», Поэтому можно видеть ошибки по мере их возникновения.

display_errors=On

display_startup_errors позволяет включать / выключать то же переключение ошибок, которые могут возникнуть во время последовательности запуска PHP. Обычно это ошибки в конфигурации вашего PHP или веб-сервера, а не конкретно в вашем коде. Рекомендуется оставить этот параметр выключенным, если вы не устраняете проблему и не уверены, что ее вызывает.

Директива log_errors сообщает PHP или не регистрировать ошибки в файл журнала ошибок. По умолчанию этот параметр всегда включен и рекомендуется.

Остальные директивы можно оставить по умолчанию, за исключением, может быть, error_log директивы, которая позволяет указать, где регистрировать ошибки, если log_errors она включена. По умолчанию он регистрирует ошибки везде, где ваш веб-сервер определил их для регистрации.

Пользовательский журнал ошибок

Я использую веб-сервер Apache в Ubuntu, и в моих конфигурациях виртуального хоста для конкретного проекта используется следующее, чтобы определить местоположение журнала ошибок.

ErrorLog ${APACHE_LOG_DIR}/project-error.log

Это означает, что он будет регистрироваться в каталоге журналов Apache по умолчанию, который находится /var/log/apache2 в файле с именем project-error.log. Обычно я заменяю project имя веб-проекта, к которому он относится.

Итак, в зависимости от вашей локальной среды разработки вам может потребоваться настроить это в соответствии с вашими потребностями. В качестве альтернативы, если вы не можете изменить это на уровне веб-сервера, вы можете установить его на php.ini уровне в определенное место.

error_log = /path/to/php.log

Стоит отметить, что в этом файле будут регистрироваться все ошибки PHP, и если вы работаете над несколькими проектами, это может быть не идеально. Однако всегда зная, что нужно проверять, что один файл на наличие ошибок может работать лучше для вас, поэтому ваш опыт может отличаться.

Найдите и исправьте эти ошибки

Если вы недавно начали кодировать на PHP и решили включить отчет об ошибках, будьте готовы справиться с последствиями существующего кода. Вы можете увидеть некоторые вещи, которых не ожидали, и которые необходимо исправить.

Однако преимущество состоит в том, что теперь, когда вы знаете, как все это включить на уровне сервера, вы можете быть уверены, что видите эти ошибки, когда они случаются, и разбираетесь с ними до того, как их увидят другие!

Да, и если вам интересно, ошибки, о которых я говорил в начале этого поста, были связаны с тем фактом, что я неправильно определял константы, не добавляя кавычек вокруг имени константы.

define(CONSTANT, 'Hello world.');

PHP разрешил (и может все еще разрешать) это, но это вызовет уведомление.

Notice: Use of undefined constant CONSTANT - assumed 'CONSTANT' 

Это уведомление появлялось каждый раз, когда я определял константу, что для этого проекта было примерно 8 или 9 раз. Не очень хорошо для кого-то видеть 8 или 9 уведомлений вверху каждой страницы ...

Комментарии ()

    Написать комментарий