Раздел помощи SpaceWeb

Вывод ошибок PHP

13 дек, 2023

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

При разработке сайтов и скриптов крайне важно отслеживать возникающие проблемы. Также эта информация нужна и системным администраторам, чтобы своевременно предотвращать сбои в работе сайта и сервера.

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

В статье мы расскажем, как отключить или включить отображение ошибок PHP при помощи .htaccess, через скрипт PHP и с помощью файла php ini.

Обратите внимание: в некоторых случаях изменить настройки вывода можно только через обращение в техническую поддержку.

Способы включения и отключения вывода ошибок PHP

Через .htaccess

Перейдите в корневую папку сайта. Путь к корневой папке можно посмотреть в разделе «Хостинг» >  «Сайты» в колонке «Папка»:

Открыть папку можно в разделе «Хостинг»  > «Файловый менеджер». Другой способ перейти к папке: в разделе «Хостинг»  > «Сайты» в колонке «Операции» нажмите Открыть папку

В корневой папке откройте файл .htaccess. Если файла не существует, создайте его.

Чтобы вывести ошибки, добавьте в файл следующие строки:

php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on

Чтобы отключить ошибки PHP, добавьте в файл строки:

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off

Так же отключить отображение PHP error можно используя строки:

php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

Через логи PHP

Проверить или скрыть ошибки в определенных файлах можно при помощи вызова PHP-функций. 

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

  • Функция для вывода всех ошибок:
error_reporting(E_ALL)
  • Функция для вывода всех ошибок, за исключением типа Notice:
error_reporting(E_ALL & ~E_NOTICE)
  • Отключение вывода:
error_reporting(0)
  • Отключение логирования повторяющихся ошибок:
# disable repeated error logging
php_flag ignore_repeated_errors on
php_flag ignore_repeated_source on

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

Команда для вывода всех ошибок выглядит следующим образом:

ini_set('display_errors', 'On')
error_reporting(E_ALL)

После этого добавьте:

ini_set('display_errors', 'Off')

Способ 3. Другой вариант включения вывода ошибок через скрипт:

php_flag display_startup_errors on
php_flag display_errors on

Для отключения добавьте строки:

php_flag display_startup_errors off
php_flag display_errors off

Способ 4. Для подключения вывода с логированием через конфигурацию веб-сервера введите:

  • для Apache:
ErrorLog «/var/log/apache2/my-website-error.log»,
  • для Nginx:
error_log /var/log/nginx/my-website-error.log.

Подробнее о других аргументах вы можете прочитать в документации PHP на официальном сайте php.net.

Через файл php.ini

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

Важно! Настройка отслеживания ошибок через файл php.ini есть не у всех, так как некоторые хостинг-провайдеры частично или полностью закрывают доступ к файлу.

Способ 1. Показать все ошибки можно добавив в php.ini строку:

display_errors = on

После этого перезагрузите сервер:

sudo apachectl -k graceful

Способ 2. Включить вывод ошибок можно при помощи error_reporting. После знака «=» пропишите необходимое вам значение в зависимости от того, какие типы ошибок вы хотите увидеть. 

Чтобы вывести все ошибки, добавьте следующие строки:

error_reporting = E_ALL
display_errors On

После перезагрузите веб-сервер:

sudo apachectl -k graceful

Чтобы скрыть отображение ошибок, добавьте строки:

error_reporting = E_ALL
display_errors Off

Теперь вы знаете, как можно включить и отключить вывод ошибок PHP.