How to Display PHP Errors
Different errors can occur during the execution of a PHP application. Developers often meet obstacles while trying to display such errors. If you also have issues with your PHP application and want to display the errors, you are in the right place.
The Quick Display of a PHP Error with ini_set
If you want to quickly show all the PHP errors and warnings, then you should add the following lines to your code:
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); ?>
The ini_set function may allow overriding the configuration detected in the PHP ini file. Different directives can be available. Two of them are display_errors and display_startup_errors that are demonstrated in the example above. The first director, as a rule, determines whether the errors are going to be shown to the user or hidden. After development, it should be turned off.
The display_startup_errors directive is considered a separate one, as the display_errors doesn’t deal with the errors occurring during the startup sequence.
It is essential to note that the directives above can’t parse errors like missing curly braces or missing semicolons. In such cases, it is necessary to modify the PHP ini configuration.
Using Configuration of PHP.ini
The PHP.ini configuration has additional directives aimed at handling and showing the errors in the browser during testing.
To use it, you need to act like this:
So, you need to turn on the display_errors directive inside the PHP.ini file. It can display all the errors, particularly, parse and syntax errors that can’t be shown by calling only the ini_set function. That file can be detected in the displayed output of the phpinfo() function. When the web application is in production, this directive should be set to off.
Displaying Errors with the .htaccess Configuration
With the .htaccess file, a directive for displaying errors can be enabled or disabled like this:
php_flag display_startup_errors on php_flag display_errors on
The .htaccess file also encompasses directives such as display_startup_errors and display_errors .
Inside this file, a custom error log may be enabled as far as the log file or the log folder is writable by the web. The log file can be a path to the place .htaccess is placed. Either it may be an absolute path like /var/www/html/website/public/logs:
Displaying Fatal Errors
If you only want to display fatal errors and not warnings or notices, you can modify the error reporting level to exclude non-fatal errors. Here’s an example:
error_reporting(E_ERROR); ini_set('display_errors', 1);
In this example, the error_reporting function is set to only report fatal errors, using the E_ERROR constant. This constant represents the most severe type of error in PHP and includes fatal errors, which halt the script execution, but not warnings or notices.
The ini_set function is used to turn on the display of errors, just as in the previous example. This will display any fatal errors that occur in your PHP code on the web page.
Note that this approach will only display fatal errors and suppress all other errors, including warnings and notices. This can be useful in some cases, but it may also mask other issues that could be important for debugging and troubleshooting your code. It’s generally recommended to fix all errors and warnings, and to use a comprehensive error reporting system that logs errors and sends notifications to developers or administrators.
Php display fatal errors
Поведение этих функций зависит от установок в php.ini .
Имя | По умолчанию | Место изменения | Список изменений |
---|---|---|---|
error_reporting | NULL | PHP_INI_ALL | |
display_errors | «1» | PHP_INI_ALL | |
display_startup_errors | «1» | PHP_INI_ALL | До PHP 8.0.0 значение по умолчанию было «0» . |
log_errors | «0» | PHP_INI_ALL | |
log_errors_max_len | «1024» | PHP_INI_ALL | Не имеет смысла в версии PHP 8.0.0, удалено в версии PHP 8.1.0. |
ignore_repeated_errors | «0» | PHP_INI_ALL | |
ignore_repeated_source | «0» | PHP_INI_ALL | |
report_memleaks | «1» | PHP_INI_ALL | |
track_errors | «0» | PHP_INI_ALL | Объявлено устаревшим в PHP 7.2.0, удалено в PHP 8.0.0. |
html_errors | «1» | PHP_INI_ALL | |
xmlrpc_errors | «0» | PHP_INI_SYSTEM | |
xmlrpc_error_number | «0» | PHP_INI_ALL | |
docref_root | «» | PHP_INI_ALL | |
docref_ext | «» | PHP_INI_ALL | |
error_prepend_string | NULL | PHP_INI_ALL | |
error_append_string | NULL | PHP_INI_ALL | |
error_log | NULL | PHP_INI_ALL | |
error_log_mode | 0o644 | PHP_INI_ALL | Доступно, начиная с PHP 8.2.0 |
syslog.facility | «LOG_USER» | PHP_INI_SYSTEM | Доступно, начиная с PHP 7.3.0. |
syslog.filter | «no-ctrl» | PHP_INI_ALL | Доступно, начиная с PHP 7.3.0. |
syslog.ident | «php» | PHP_INI_SYSTEM | Доступно, начиная с PHP 7.3.0. |
Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.
Краткое разъяснение конфигурационных директив.
Задаёт уровень протоколирования ошибки. Параметр может быть либо числом, представляющим битовое поле, либо именованной константой. Соответствующие уровни и константы приведены в разделе Предопределённые константы, а также в php.ini . Для установки настройки во время выполнения используйте функцию error_reporting() . Смотрите также описание директивы display_errors.
Значение по умолчанию равно E_ALL .
До PHP 8.0.0 значение по умолчанию было: E_ALL & ~ E_NOTICE & ~ E_STRICT & ~ E_DEPRECATED . При этой настройке не отображаются уровни ошибок E_NOTICE , E_STRICT и E_DEPRECATED .
Замечание: PHP-константы за пределами PHP
Использование PHP-констант за пределами PHP, например в файле httpd.conf , не имеет смысла, так как в таких случаях требуются целочисленные значения ( int ). Более того, с течением времени будут добавляться новые уровни ошибок, а максимальное значение константы E_ALL соответственно будет расти. Поэтому в месте, где предполагается указать E_ALL , лучше задать большое целое число, чтобы перекрыть все возможные битовые поля. Таким числом может быть, например, 2147483647 (оно включит все возможные ошибки, не только E_ALL ).
Эта настройка определяет, требуется ли выводить ошибки на экран вместе с остальным выводом, либо ошибки должны быть скрыты от пользователя.
Значение «stderr» посылает ошибки в поток stderr вместо stdout .
Замечание:
Эта функциональность предназначена только для разработки и не должен использоваться в готовых производственных системах (например, системах, имеющих доступ в интернет).
Замечание:
Несмотря на то, что display_errors может быть установлена во время выполнения (функцией ini_set() ), это ни на что не повлияет, если в скрипте есть фатальные ошибки. Это обусловлено тем, что ожидаемые действия программы во время выполнения не получат управления (не будут выполняться).
Даже если display_errors включена, ошибки, возникающие во время запуска PHP, не будут отображаться. Настойчиво рекомендуем включать директиву display_startup_errors только для отладки.
Отвечает за выбор журнала, в котором будут сохраняться сообщения об ошибках. Это может быть журнал сервера или error_log. Применимость этой настройки зависит от конкретного сервера.
Замечание:
Настоятельно рекомендуем при работе на готовых работающих web сайтах протоколировать ошибки там, где они отображаются.
Задание максимальной длины log_errors в байтах. В error_log добавляется информация об источнике. Значение по умолчанию 1024. Установка значения в 0 позволяет снять ограничение на длину log_errors. Это ограничение распространяется на записываемые в журнал ошибки, на отображаемые ошибки, а также на $php_errormsg , но не на явно вызываемые функции, такие как error_log() .
Если используется int , значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана в этом разделе FAQ. ignore_repeated_errors bool
Не заносить в журнал повторяющиеся ошибки. Ошибка считается повторяющейся, если происходит в том же файле и в той же строке, и если настройка ignore_repeated_source выключена.
Игнорировать источник ошибок при пропуске повторяющихся сообщений. Когда эта настройка включена, повторяющиеся сообщения об ошибках не будут заноситься в журнал вне зависимости от того, в каких файлах и строках они происходят.
Если настройка включена (по умолчанию), будет формироваться отчёт об утечках памяти, зафиксированных менеджером памяти Zend. На POSIX платформах этот отчёт будет направляться в поток stderr. На Windows платформах он будет посылаться в отладчик функцией OutputDebugString(), просмотреть отчёт в этом случае можно с помощью утилит, вроде » DbgView. Эта настройка имеет смысл в сборках, предназначенных для отладки. При этом E_WARNING должна быть включена в список error_reporting.
Если включена, последняя произошедшая ошибка будет первой в переменной $php_errormsg .
Если разрешена, сообщения об ошибках будут включать теги HTML. Формат для HTML-ошибок производит нажимаемые ссылки, ведущие на описание ошибки, либо функии, в которой она произошла. За такие ссылки ответственны docref_root и docref_ext.
Если запрещена, то ошибки будут выдаваться простым текстом, без форматирования.
Если включена, то нормальное оповещение об ошибках отключается и, вместо него, ошибки выводятся в формате XML-RPC.
Используется в качестве значения XML-RPC элемента faultCode.
Новый формат ошибок содержит ссылку на страницу с описанием ошибки или функции, вызвавшей эту ошибку. Можно разместить копию описаний ошибок и функций локально и задать ini директиве значение URL этой копии. Если, например, локальная копия описаний доступна по адресу «/manual/» , достаточно прописать docref_root=/manual/ . Дополнительно, необходимо задать значение директиве docref_ext, отвечающей за соответствие расширений файлов файлам описаний вашей локальной копии, docref_ext=.html . Также возможно использование внешних ссылок. Например, docref_root=http://manual/en/ или docref_root=»http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F»
В большинстве случаев вам потребуется, чтобы значение docref_root оканчивалось слешем «/» . Тем не менее, бывают случаи, когда это не требуется (смотрите выше, второй пример).
Замечание:
Эта функциональность предназначена только для разработки, так как он облегчает поиск описаний функций и ошибок. Не используйте его в готовых производственных системах (например, имеющих доступ в интернет).
Замечание:
Значение docref_ext должно начинаться с точки «.» .
Строка, которая будет выводиться непосредственно перед сообщением об ошибке. Используется только тогда, когда на экране отображается сообщение об ошибке. Основная цель — добавить дополнительную HTML-разметку к сообщению об ошибке.
Строка, которая будет выводиться после сообщения об ошибке. Используется только тогда, когда на экране отображается сообщение об ошибке. Основная цель — добавить дополнительную HTML-разметку к сообщению об ошибке.
Имя файла, в который будут добавляться сообщения об ошибках. Файл должен быть открыт для записи пользователем веб-сервера. Если используется специальное значение syslog , то сообщения будут посылаться в системный журнал. На Unix-системах это syslog(3), на Windows NT — журнал событий. Смотрите также: syslog() . Если директива не задана, ошибки будут направляться в SAPI журналы. Например, это могут быть журналы ошибок Apache или поток stderr командной строки CLI. Смотрите также функцию error_log() .
Указывает, какой тип программы регистрирует сообщение. Действует только в том случае, если опция error_log установлена в «syslog».
- all – строка будет разделена на символы новой строки и все символы будут переданы без изменений
- ascii – строка будет разделена на символы новой строки, а любые непечатаемые 7-битные символы ASCII будут экранированы
- no-ctrl – строка будет разделена на символы новой строки, а любые непечатаемые символы будут экранированы
- raw – все символы передаются в системный журнал без изменений, без разделения на новые строки (идентично PHP до 7.3)
Замечание:
Тип фильтра raw доступен начиная с PHP 7.3.8 и PHP 7.4.0.
Определяет строку идентификатора, которая добавляется к каждому сообщению. Действует только в том случае, если опция error_log установлена в «syslog».