При выполнении PHP-приложения может возникать множество ошибок и предупреждений разного уровня. Просмотр этих ошибок очень важен для разработчиков при устранении неполадок в приложении. Однако при попытке отобразить ошибки PHP-приложений часто возникают трудности, так как они часто нигде не видны.
Быстрый способ показать все ошибки PHP
Добавление следующих строк в ваш PHP-код — самый быстрый способ показать все ошибки и предупреждения PHP.
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Вышеперечисленные функции и директивы работают следующим образом:
ini_set()
Функция ini_set
пытается переопределить конфигурацию, содержащуюся в файле PHP .ini.
display_errors
display_errors
— это директива, которая определяет, будут ли ошибки показаны пользователю или останутся скрытыми. Обычно ее следует отключать после разработки.
display_startup_errors
Директива display_startup_errors
также используется для поиска ошибок, возникающих при запуске PHP. Это отдельная директива, потому что директива display_errors
не обрабатывает такие ошибки.
К сожалению, директивы display_errors
и display_startup_errors
не показывают ошибки парсинга, такие как пропущенные точки с запятой или фигурные скобки. Для этого необходимо изменить конфигурацию PHP ini.
error_reporting()
error_reporting
— это встроенная функция PHP, которая используется для отображения ошибок. Эта функция может быть использована для сообщения обо всех типах ошибок в PHP-скрипте. Для этого в качестве аргумента в функции используется именованная константа E_ALL
.
Настройка PHP.ini для отображения всех ошибок и предупреждений
Если добавление вышеуказанных функций и директив не показывает все ошибки, в конфигурации PHP ini есть дополнительные директивы, которые можно изменить:
display_errors = on
Директива display_errors
может быть установлена в значение on
в файле PHP.ini. При этом будут отображаться все ошибки, включая синтаксические и ошибки разбора, которые не отображаются только при вызове функции ini_set
в коде PHP.
Обратите внимание, что директива display_errors
должна быть установлена в значение off
, если приложение находится в процессе создания.
Файл PHP.ini можно найти в выводе функции phpinfo()
:
# php 7.x
<?php
phpinfo();
?>
Загруженный файл конфигурации (Loaded Configuration File) показывает расположение файла PHP.ini.
Функция PHP error_reporting()
Функция сообщения об ошибках — это встроенная в PHP функция, которая позволяет разработчикам указывать, какие и сколько ошибок будут отображаться в приложении. Эта функция устанавливает директиву error_reporting
в конфигурации PHP ini во время выполнения.
error_reporting(0);
Значение 0
следует передать функции error_reporting
, чтобы удалить все ошибки, предупреждения, сообщения парсинга и уведомления.
error_reporting(E_NOTICE);
В PHP разрешено использовать переменные, даже если они не объявлены. Это не лучшая практика, так как необъявленные переменные вызывают проблемы при использовании в циклах и условиях. Необъявленные переменные отображаются в веб-приложении, когда в функции error_reporting
передается E_NOTICE
.
error_reporting(E_ALL & ~E_NOTICE);
Функция error_reporting
позволяет разработчикам фильтровать, какие ошибки PHP могут быть показаны. Символ ~
означает «не» (not
) или «нет» (no
), поэтому параметр ~E_NOTICE
означает не показывать уведомления. Символ &
означает «верно для всех».
error_reporting(E_ALL);
error_reporting(-1);
ini_set('error_reporting', E_ALL);
Эти 3 строки кода делают одно и то же — они показывают все ошибки PHP. Наиболее часто используется error_reporting(E_ALL)
, так как он более читабелен.
Показ ошибок PHP через конфигурацию .htaccess
Файлы каталогов обычно доступны разработчикам. Файл .htaccess, расположенный в корневой или публичной директории проекта, также можно использовать для включения или отключения директивы для показа ошибок PHP.
php_flag display_startup_errors on
php_flag display_errors on
В файле .htaccess есть директивы display_startup_errors
и display_errors
, аналогичные тем, что будут добавлены в PHP-код для отображения ошибок. Разработка и продакшен могут иметь разные файлы .htaccess, показывая или отключая сообщения об ошибках таким образом, при этом продакшен будет подавлять показ ошибок.
Директива display_errors
в .htaccess или в файле PHP.ini может потребовать настройки в зависимости от того, какие файлы доступны и как выполняется развертывание и конфигурация сервера. Многие хостинг-провайдеры не разрешают вносить изменения в файл PHP.ini для включения display_errors
.