
В PHP отображение ошибок по умолчанию отключено на большинстве серверов из соображений безопасности. Это предотвращает утечку информации о структуре кода, но затрудняет отладку на этапе разработки. Для получения детальной информации о проблемах необходимо включить отображение ошибок с помощью конфигурационных директив display_errors и error_reporting.
Для временного включения ошибок без изменения глобальных настроек сервера можно вставить в начало скрипта следующие строки: ini_set(‘display_errors’, 1); и error_reporting(E_ALL); Это особенно удобно при отладке локальных проектов или тестировании отдельных функций, не затрагивая производственный сервер.
Проверка текущих настроек отображения ошибок

| Параметр | Описание | Рекомендация |
|---|---|---|
| display_errors | Для разработки включить (On), для продакшена выключить (Off). |
|
| display_startup_errors | Отвечает за отображение ошибок, возникающих при запуске PHP. | Рекомендуется включать на этапе отладки. В продакшене – Off. |
| error_reporting | Определяет, какие категории ошибок регистрируются. | Для отладки использовать E_ALL, в продакшене – E_ALL & ~E_NOTICE & ~E_DEPRECATED. |
Для быстрой проверки текущих значений можно использовать следующий код:
<?php
echo 'display_errors: ' . ini_get('display_errors') . '<br>';
echo 'display_startup_errors: ' . ini_get('display_startup_errors') . '<br>';
echo 'error_reporting: ' . error_reporting();
?>
Использование ini_set для включения ошибок в скрипте

ini_set('display_errors', '1');
Для контроля уровня ошибок применяется функция error_reporting. Рекомендуется использовать константу E_ALL, чтобы фиксировать все типы ошибок, включая предупреждения и уведомления:
error_reporting(E_ALL);
Эти команды можно разместить в начале скрипта для того, чтобы все последующие блоки кода использовали заданные настройки. Важно помнить, что ini_set('display_errors', '1') работает только если в конфигурации PHP директива display_errors не запрещена на уровне php.ini или веб-сервера.
Для временного отключения ошибок в определенной части скрипта достаточно вызвать ini_set('display_errors', '0');. Это удобно при работе с участками кода, где ожидаются предупреждения, которые не требуют немедленного исправления.
Использование ini_set совместно с error_reporting обеспечивает гибкое управление отображением ошибок без изменения глобальных настроек сервера и позволяет адаптировать поведение скрипта под разные среды – разработку, тестирование или продакшн.
Настройка display_errors в php.ini

Для изменения откройте файл php.ini и найдите строку:
display_errors = Off
Замените Off на On для включения отображения ошибок. После изменения перезапустите веб-сервер (Apache, Nginx, PHP-FPM), чтобы новые настройки вступили в силу.
Рекомендуется также настроить error_reporting, чтобы контролировать уровни ошибок. Например:
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
Для временного изменения настроек можно использовать функции PHP:
ini_set('display_errors', 1);
error_reporting(E_ALL);
Это полезно для тестирования на конкретных скриптах без изменения глобального php.ini.
log_errors = On
error_log = /var/log/php_errors.log
Так ошибки сохраняются в файл и не отображаются пользователю.
Применение error_reporting для выбора уровней ошибок
Функция error_reporting() в PHP задаёт, какие типы ошибок будут регистрироваться. Она принимает целое число, соответствующее комбинации констант ошибок.
Основные константы ошибок:
E_ERROR– критические ошибки времени выполнения, скрипт прекращает работу.E_WARNING– предупреждения, выполнение продолжается.E_PARSE– ошибки синтаксиса.E_NOTICE– уведомления о потенциальных проблемах.E_CORE_ERRORиE_CORE_WARNING– ошибки ядра PHP.E_ALL– все ошибки, кромеE_STRICTв старых версиях PHP.
Примеры использования:
- Регистрация всех ошибок:
error_reporting(E_ALL); - Игнорирование уведомлений
E_NOTICE:error_reporting(E_ALL & ~E_NOTICE);
error_reporting(E_ERROR | E_WARNING);
Для локальной разработки рекомендуется использовать error_reporting(E_ALL). В продакшене чаще отключают уведомления и предупреждения, оставляя только критические ошибки.
Важно: изменение уровня ошибок через error_reporting() действует только в пределах текущего скрипта. Для глобальной настройки используют файл php.ini:
error_reporting = E_ALL & ~E_NOTICE
Сочетание error_reporting() с ini_set('display_errors', 1) позволяет гибко управлять видимостью ошибок на разных этапах разработки и эксплуатации.
Включение отображения ошибок при работе через веб-сервер

После изменения php.ini требуется перезапуск веб-сервера: Apache через systemctl restart apache2, Nginx с systemctl restart nginx. Без перезапуска новые настройки не применятся.
Если доступ к php.ini ограничен, включение ошибок возможно через локальный файл .htaccess. Пример:
php_flag display_errors on
php_value error_reporting 32767
Для временного включения ошибок в конкретном скрипте используйте функции PHP: ini_set('display_errors', '1'); и error_reporting(E_ALL);. Этот метод не требует изменения глобальных настроек и подходит для тестирования.
Важно отключать отображение ошибок на продуктивных серверах, чтобы исключить утечку внутренней информации. Для этого достаточно вернуть display_errors = Off или закомментировать соответствующие строки в .htaccess.
Отображение ошибок при запуске PHP в командной строке
Для диагностики скриптов в CLI важно видеть все ошибки. По умолчанию отображение ошибок может быть отключено, что затрудняет отладку. Управление осуществляется через настройки php.ini и командную строку.
Ключевые параметры в php.ini:
error_reporting– определяет уровень сообщений. Например,E_ALLвключает все ошибки и предупреждения.
Для временного включения ошибок при запуске скрипта можно использовать ключ -d:
php -d display_errors=On -d error_reporting=E_ALL script.php
Рекомендуется также:
- Настраивать
error_logдля записи ошибок в отдельный файл при необходимости аудита. - Применять
php -l script.phpдля проверки синтаксиса без выполнения скрипта.
При работе с PHP в CLI важно учитывать, что настройки могут отличаться от веб-сервера. Проверить текущие параметры можно командой:
php -i | grep error
Следует помнить, что отключение отображения ошибок в продуктивной среде CLI не требуется, но при разработке видеть все предупреждения и ошибки критично для корректного анализа работы скриптов.
Временное отключение отображения ошибок на продакшене
На рабочем сервере отображение ошибок должно быть отключено, чтобы пользователи не видели внутренние сообщения PHP, содержащие пути к файлам, данные сессий и другую чувствительную информацию. Для этого в конфигурации PHP можно использовать директиву display_errors:
ini_set(‘display_errors’, 0);
display_errors = Off
Для удобного логирования ошибок используйте log_errors:
log_errors = On
И укажите файл для хранения логов через error_log:
error_log = /var/log/php_errors.log
При необходимости временно включить отображение ошибок для диагностики конкретного скрипта, добавьте перед критической секцией:
ini_set(‘display_errors’, 1); error_reporting(E_ALL);
После завершения отладки необходимо сразу вернуть исходное состояние:
ini_set(‘display_errors’, 0);
Такой подход обеспечивает сбор полной информации об ошибках без риска раскрытия данных пользователям на продакшене.
Вопрос-ответ:
Почему в моем скрипте PHP ошибки не отображаются?
Если ошибки не видны, это может быть связано с настройками конфигурации PHP. Обычно директивы display_errors и error_reporting управляют показом сообщений об ошибках. Нужно убедиться, что display_errors включен, а error_reporting настроен на показ нужного уровня ошибок. Это можно сделать через php.ini, через .htaccess или прямо в коде с помощью функции ini_set.
Как включить отображение всех ошибок в PHP только для тестовой версии сайта?
Для локальной или тестовой версии сайта удобно включать отображение ошибок через код, чтобы не менять глобальные настройки сервера. Например, в начале скрипта можно добавить: ini_set('display_errors', 1); error_reporting(E_ALL);. Это позволит увидеть все предупреждения и ошибки, но на рабочем сервере такой подход может быть опасен, поэтому на продакшене лучше оставлять отображение ошибок выключенным.
Можно ли настроить отображение ошибок только для определенного скрипта, не меняя глобальные настройки PHP?
Да, PHP позволяет управлять показом ошибок на уровне конкретного файла. Для этого в начале скрипта используют функции ini_set и error_reporting. Например, ini_set('display_errors', 1); error_reporting(E_ALL & ~E_NOTICE); покажет все ошибки, кроме уведомлений. Это удобно, если нужно отлаживать отдельный модуль без вмешательства в настройки всего сервера.
Какая разница между логированием ошибок и их отображением на экране?
Отображение ошибок выводит сообщения прямо в браузер, что удобно при разработке, но опасно на рабочем сервере, так как может раскрывать внутренние детали кода. Логирование ошибок сохраняет их в файл или системный журнал, что позволяет отслеживать проблемы без риска для безопасности. Настроить логирование можно через директивы error_log и log_errors, а отображение оставить выключенным на продакшене.
