
Отображение ошибок PHP необходимо для точного выявления проблем в коде. На сервере директива display_errors по умолчанию часто отключена. Для включения ошибок в рабочем процессе нужно изменить php.ini или использовать ini_set(‘display_errors’, 1); прямо в скрипте.
Директива error_reporting определяет, какие ошибки будут фиксироваться. Для полного контроля рекомендуется установить error_reporting(E_ALL);, что позволит отлавливать синтаксические ошибки, предупреждения и уведомления о потенциальных проблемах. В комбинации с log_errors ошибки сохраняются в файл журнала, например /var/log/php_errors.log, что облегчает последующий анализ.
Проверка текущих настроек PHP для отображения ошибок

Для проверки текущих настроек создайте файл phpinfo.php с содержимым:
<?php phpinfo(); ?>
Альтернативно, можно проверить настройки через скрипт:
<?php
echo 'display_errors: '.ini_get('display_errors')."<br>";
echo 'error_reporting: '.error_reporting();
?>
Результат покажет текущий режим отображения ошибок и активные типы сообщений. Для разработки рекомендуется устанавливать display_errors = 1 и error_reporting(E_ALL), для продакшн-среды – display_errors = 0 с логированием ошибок.
Пример таблицы текущих настроек PHP для ошибок:
| Директива | Текущее значение | Рекомендованное значение |
|---|---|---|
| display_errors | Off | On (для разработки) |
| error_reporting | 22527 (E_ALL & ~E_NOTICE & ~E_DEPRECATED) | E_ALL |
| log_errors | On | On |
| error_log | /var/log/php_errors.log | Указанный файл лога |
Использование этой проверки позволяет точно определить, какие ошибки будут видны на сайте, и настроить их отображение или логирование в соответствии с требованиями проекта.
Включение отображения ошибок через php.ini
Для полноценного отображения ошибок PHP на сайте необходимо редактировать файл конфигурации php.ini. Этот метод обеспечивает глобальное применение настроек и подходит для всех скриптов, работающих на сервере.
Основные параметры для включения отображения ошибок:
display_startup_errors = On– отображает ошибки, возникающие при запуске PHP.error_reporting = E_ALL– включает отображение всех типов ошибок, предупреждений и уведомлений.
Пример настройки:
display_errors = On display_startup_errors = On error_reporting = E_ALL
После изменения php.ini необходимо перезапустить веб-сервер, чтобы новые значения вступили в силу. В Apache это делается командой:
sudo systemctl restart apache2
Для Nginx с PHP-FPM:
sudo systemctl restart php8.1-fpm sudo systemctl restart nginx
Важно учитывать:
- Включение
display_errorsна рабочем сайте не рекомендуется из соображений безопасности – ошибки могут раскрывать внутреннюю структуру приложения. - Для продакшн-среды лучше использовать
log_errors = Onи указывать путь к файлу журналирования черезerror_log. - Изменения в
php.iniимеют приоритет над настройками черезini_set(), если не активирован.htaccessили пользовательские конфигурации.
Настройка отображения ошибок с помощью ini_set в скриптах
Для включения отображения ошибок непосредственно в PHP-скрипте используется функция ini_set. Она позволяет изменить параметры конфигурации PHP без редактирования php.ini. Основные настройки для отладки:
Для контроля уровня ошибок применяют error_reporting. Например:
error_reporting(E_ALL); – активирует отображение всех типов ошибок, включая предупреждения и уведомления. Для выборочной отладки можно комбинировать константы, например: error_reporting(E_ERROR | E_WARNING);
Важно устанавливать эти параметры в начале скрипта, до выполнения кода, который может вызвать ошибки. Это гарантирует, что все ошибки будут перехвачены и отображены.
ini_set('display_errors', '0'); – ошибки перестают отображаться, но продолжают логироваться, если включен log_errors.
При работе с ini_set стоит помнить о безопасности: отображение ошибок на публичном сайте может раскрывать структуру кода и пути к файлам. Рекомендуется использовать его только в локальной или тестовой среде.
Использование error_reporting для детального контроля сообщений

Для разработки рекомендуется включать полный контроль ошибок: error_reporting(E_ALL). Это позволяет выявлять даже мелкие предупреждения и устаревшие функции, что критично для отладки и предотвращения будущих багов.
Функцию можно использовать динамически, изменяя уровень ошибок в конкретных скриптах без влияния на глобальные настройки php.ini. После выполнения участка кода рекомендуется возвращать предыдущий уровень: $old_level = error_reporting(); error_reporting(E_ALL); … error_reporting($old_level);.
Для отладки сложных приложений полезно комбинировать error_reporting() с ini_set('display_errors', 1) для временного отображения всех ошибок на экране, или с ini_set('log_errors', 1) для записи в лог, сохраняя контроль над тем, какие сообщения видит пользователь.
Использование побитовых операций позволяет гибко настраивать исключения: error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE) отключит предупреждения об устаревших функциях и уведомления, оставляя критические ошибки.
Важно применять error_reporting() локально в разработке и тестировании, избегая полного отображения ошибок в продакшн-среде, чтобы не раскрывать внутреннюю структуру приложения пользователям.
Включение отображения ошибок на локальном сервере vs на боевом сайте
На локальном сервере отображение ошибок PHP должно быть максимально полным для упрощения отладки. Для этого в файле php.ini необходимо установить display_errors = On и error_reporting = E_ALL. Также полезно добавить в код проекта строки:
ini_set('display_errors', 1);
error_reporting(E_ALL);
Это позволит увидеть все предупреждения, notices и фатальные ошибки, включая ошибки синтаксиса, отсутствующие переменные и проблемы с подключением файлов. На локальной среде можно использовать дополнительно Xdebug для пошаговой отладки и трассировки стека.
На боевом сайте включение display_errors строго не рекомендуется, так как ошибки могут раскрывать структуру проекта, пути к файлам и конфиденциальные данные. Вместо этого следует включить логирование ошибок через log_errors = On и указать файл для логов, например error_log = /var/log/php_errors.log. Для более точного контроля рекомендуется выставлять уровень ошибок error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED, чтобы логировались критические ошибки без шумных предупреждений и уведомлений об устаревших функциях.
В случае необходимости временного отображения ошибок на боевом сайте используйте проверку окружения в коде:
if ($_SERVER['APP_ENV'] === 'development') {
ini_set('display_errors', 1);
error_reporting(E_ALL);
}
Это позволит безопасно включать ошибки только в тестовой среде, сохраняя защиту данных на продакшене. В итоге, локальный сервер ориентирован на полное отображение ошибок, а боевой сайт – на логирование с минимальным раскрытием информации.
Проверка и отладка после включения ошибок

После включения отображения ошибок PHP необходимо системно проверять работу сайта и корректно фиксировать возникающие предупреждения и ошибки. Рекомендуется выполнять следующие действия:
-
Проверка ошибок на страницах
Пройдитесь по ключевым разделам сайта и убедитесь, что на страницах отображаются все типы ошибок: синтаксические, предупреждения (warnings) и уведомления (notices). Для этого создайте тестовый скрипт с преднамеренной ошибкой, например:
<?php echo $undefined_variable; ?>
-
Анализ логов PHP
Даже при включенном отображении ошибок часть сообщений может отправляться в лог. Проверьте файл error_log в директории сервера или настройте отдельный лог для проекта через:
ini_set('error_log', '/путь/к/проекту/php_errors.log');Регулярно отслеживайте новые записи и классифицируйте их по критичности.
-
Использование инструментов отладки
- Xdebug: позволяет пошагово проходить код, проверять значения переменных и стек вызовов.
- PHP Console или встроенный debug bar: отображают ошибки и предупреждения прямо на страницах без необходимости обновлять логи.
- var_dump() и print_r(): для быстрых проверок значений переменных и массивов.
-
Тестирование на разных уровнях ошибок
Настройте разные уровни отображения ошибок через:
error_reporting(E_ALL);
-
Отслеживание изменений после исправления ошибок
После устранения проблем снова пройдитесь по страницам и повторно проверьте логи. Используйте контроль версий для фиксации исправлений, чтобы точно видеть, какие изменения устраняют ошибки.
Эти шаги гарантируют, что включение отображения ошибок действительно улучшает контроль качества кода, а не приводит к пропущенным предупреждениям или случайным сбоям на сайте.
Вопрос-ответ:
Почему на сайте не отображаются ошибки PHP?
Если ошибки PHP не выводятся на странице, это может быть связано с настройками конфигурации PHP. Часто по умолчанию параметр display_errors выключен для того, чтобы пользователи не видели сообщения об ошибках. Также это может зависеть от уровня отчётности ошибок (error_reporting) или настроек веб-сервера, таких как htaccess или конфигурационные файлы Nginx/Apache.
Как включить отображение ошибок PHP через файл php.ini?
Для включения сообщений об ошибках в php.ini нужно изменить следующие параметры: display_errors = On и error_reporting = E_ALL. После внесения изменений необходимо перезапустить веб-сервер, чтобы новые настройки вступили в силу. Это позволит видеть все типы ошибок, предупреждения и уведомления на страницах сайта.
Можно ли включить отображение ошибок только для конкретного скрипта PHP?
Да, это возможно с помощью встроенных функций PHP. В начале скрипта можно добавить следующие строки: ini_set(‘display_errors’, 1); error_reporting(E_ALL);. Эти команды действуют только в пределах текущего скрипта и не изменяют глобальные настройки сервера.
Почему стоит скрывать ошибки на рабочем сайте?
Ошибки PHP могут содержать внутренние пути, имена баз данных или другую служебную информацию, которую злоумышленник может использовать для атак. Поэтому на публичных ресурсах безопаснее выводить ошибки в лог-файл, используя параметр log_errors = On, и не показывать их пользователям.
Как просматривать ошибки PHP без их отображения на сайте?
Для этого используется журналирование ошибок. В php.ini нужно включить log_errors = On и указать путь к файлу логов через error_log. После этого все ошибки будут записываться в указанный файл, и их можно будет анализировать отдельно, не показывая посетителям сайта внутренние сообщения.
