Как включить показ всех ошибок и предупреждений PHP на сайте?
Как включить показ всех ошибок PHP: полное руководство
Проблема, с которой вы столкнулись, очень распространена среди начинающих разработчиков. Белый экран смерти (WSOD) возникает, когда в коде есть фатальная ошибка, но вывод ошибок отключен. Давайте разберем все способы включения отображения ошибок.
1. Включение через сам PHP-код (самый простой способ)
Поместите эти строки в самый верх вашего главного скрипта (например, index.php) до любого другого кода:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
?>
Обратите внимание на display_startup_errors — это важная директива, которая включает ошибки, возникающие при запуске PHP (например, ошибки парсинга). Без нее вы не увидите синтаксические ошибки.
2. Настройка через php.ini (глобально для всего сервера)
Найдите файл php.ini (обычно находится в /etc/php/ на Linux или в папке с PHP на Windows). Найдите и измените следующие строки:
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
После изменений обязательно перезапустите веб-сервер (Apache или Nginx).
3. Настройка через .htaccess (для Apache)
Если у вас нет доступа к php.ini, можно включить ошибки через файл .htaccess в корне сайта:
php_flag display_errors on
php_flag display_startup_errors on
php_value error_reporting E_ALL
4. Специальные уровни отчетов
Вот основные уровни, которые вам пригодятся:
E_ALL— все ошибки, включая уведомления и строгие замечанияE_WARNING— только предупрежденияE_NOTICE— только уведомления (например, неопределенная переменная)E_ALL & ~E_NOTICE— все, кроме уведомлений (чтобы не засорять вывод)
5. Пример: ваш код с включенными ошибками
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
$name = $_POST['username']; // Теперь вы увидите: Notice: Undefined index: username
echo "Привет, " . $name;
?>
После включения вы увидите что-то вроде: Notice: Undefined index: username in /path/to/file.php on line 5
6. Важные замечания
- Не оставляйте display_errors включенным на production-сервере! Это угроза безопасности. Используйте
log_errors = Onиerror_log = /path/to/error.logдля записи ошибок в файл. - Если после всех манипуляций ошибки не показываются, проверьте, не переопределяет ли ваш фреймворк или CMS эти настройки (например, WordPress или Laravel имеют свои методы обработки ошибок).
- Для максимальной детализации используйте
E_ALL | E_STRICT(в PHP < 5.4) или простоE_ALL(в PHP 5.4+ E_STRICT уже входит в E_ALL).
Теперь вы сможете видеть все ошибки и быстро находить проблемы в коде. Удачи в разработке!
<<Альтернативный подход: использование функции set_error_handler()
Если вам нужно не просто показать ошибки, но и обработать их особым образом (например, отправить в лог или на email), создайте свой обработчик ошибок:
<?php
function customErrorHandler($errno, $errstr, $errfile, $errline) {
echo "<b>Ошибка:</b> [$errno] $errstr в файле $errfile на строке $errline\n";
// Дополнительно можно записать в лог
error_log("Ошибка: [$errno] $errstr в $errfile:$errline");
return true; // Предотвращаем выполнение стандартного обработчика
}
// Устанавливаем пользовательский обработчик
set_error_handler("customErrorHandler");
// Теперь все ошибки будут проходить через вашу функцию
$name = $_POST['username']; // Будет вызван customErrorHandler
?>
Этот метод особенно полезен, когда вы работаете с чужим кодом или фреймворком, который переопределяет стандартное поведение PHP. Вы также можете комбинировать его с error_reporting(E_ALL) для максимального контроля.