zaLinux.ru

Как в PHP 8 показать все ошибки


Как в PHP 8 настроить вывод всех ошибок

По умолчанию в PHP 8 отключён показ ошибок, поэтому если во время выполнения PHP скрипта возникла проблема, то на экран ничего не будет выведено. Если ошибка в программе произошла до вывода HTML кода, то вы увидите белый экран веб-браузера.

Где настраивается вывод ошибок в PHP

Вывод ошибок настраивается в:

  • коде скрипта
  • .htaccess файле
  • в конфигурационном файле PHP (например, в php.ini)

Настройке в коде скрипта влияют на поведение только программы, в которую внесены настройки.

Настройки в файле .htaccess влияют на все скрипты, находящиеся в данной директории и поддиректориях.

Настройки в конфигурационном файле php.ini влияют на все запускаемые PHP скрипты, если в них не переназначены настройки вывода ошибок.

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

Настройка вывода ошибок в PHP скрипте

Для вывода всех ошибок, добавьте в начало скрипта следующие строки:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Данные настройки включают вывод всех ошибок и предупреждений в веб-браузер пользователя.

Будут выведены предупреждения об использовании устаревших конструкций.

Настройка вывода ошибок в журналы веб-сервера выполняется отдельно.

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

Настройка вывода ошибок PHP в файле .htaccess

Включение вывода ошибок в файле .htaccess выполняется следующими директивами:

php_flag display_startup_errors on
php_flag display_errors on

Чтобы они сработали, необходимо, чтобы на веб-сервере была включена поддержка файлов .htaccess.

Вывод ошибок в журнал веб-сервера выполняется следующей директивой:

php_value error_log logs/all_errors.log

Настройка вывода всех ошибок в файле php.ini

Файл php.ini — это конфигурационный файл PHP.

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

Расположение файла php.ini:

  • В Debian и производных дистрибутивах (Ubuntu, Linux Mint, Kali Linux и прочих) зависит от версии PHP, например, для PHP 8.1 путь до файла следующий: /etc/php/8.1/apache2/php.ini
  • В Arch Linux и производных дистрибутивах (Manjaro, BlackArch и прочих): /etc/php/php.ini

В файле php.ini вы найдёте следующие директивы:

display_errors = Off
display_startup_errors = Off

Для включения вывода ошибок замените их на:


display_errors = On
display_startup_errors = On


По умолчанию значение error_reporting установлено на:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Это означает, что выводятся все ошибки, кроме предупреждений об устаревших конструкциях и предупреждения, вызванные строгой проверкой кода.

Чтобы выводить все ошибки и предупреждения, установите следующее значение:

error_reporting = E_ALL

Популярные значения:

  • E_ALL (Показать все ошибки, предупреждения и уведомления, включая стандарты написания кода.)
  • E_ALL & ~E_NOTICE (Показать все ошибки, кроме уведомлений)
  • E_ALL & ~E_NOTICE & ~E_STRICT (Показать все ошибки, кроме уведомлений и предупреждений о стандартах написания кода.)
  • E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Показать только ошибки)

Подробности смотрите по ссылке: https://www.php.net/manual/errorfunc.constants.php

Для того, чтобы изменения, сделанные в файле php.ini, вступили в силу, необходима перезагрузка веб-сервера.

  • В Debian и производных дистрибутивах (Ubuntu, Linux Mint, Kali Linux и прочих) это делается командой:
sudo systemctl restart apache2.service
  • В Arch Linux и производных дистрибутивах (Manjaro, BlackArch и прочих) это делается командой:
sudo systemctl restart httpd.service

Чтобы проверить, что настройки файла php.ini действительно применяются, создайте файл, например, с именем info.php и скопируйте в него:

<?php
phpinfo();

Если вы создали файл в корневой папке веб-сервера, то в веб-браузере откройте адрес http://localhost/info.php.

На следующем скриншоте показано, что вывод ошибок отключён в файле php.ini:


На этом скриншоте видно, что вывод ошибок включён в файле php.ini:

Вывод ошибок в журнал веб-сервера

Настройка вывода ошибок в журнал веб-сервера настраивается в файле php.ini.

Для этого используется следующая директива:

log_errors = On

Расположение файла с ошибка настраивается в конфигурации веб-сервера.

Смотрите также: Почему в логах ошибок Apache не сохраняются записи об ошибке 404

Директива «error_reporting('all');» и ошибка «Uncaught TypeError: error_reporting()»

При попытке использовать следующую конструкцию:

error_reporting('all');

Вы столкнётесь с ошибкой Uncaught TypeError: error_reporting().

Полный лог ошибки:

[Wed Jul 06 07:29:19.410966 2022] [php:error] [pid 14101] [client 127.0.0.1:58402] PHP Fatal error: Uncaught TypeError: error_reporting(): Argument #1 ($error_level) must be of type ?int, string given in /srv/http/suip/index.php:3\nStack trace:\n#0 /srv/http/suip/index.php(3): error_reporting('all')\n#1 {main}\n thrown in /srv/http/suip/index.php on line 3, referer: http://localhost/suip/

Вместо 'all' вам нужно указать константу, выражающую уровень сообщения об ошибках. Допустимые значения провидены на этой страницы: https://www.php.net/manual/errorfunc.constants.php

Следующая запись является правильной для PHP 8 и означает показывать все ошибки, замечания и рекомендации:

error_reporting(E_ALL);

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован.