Как вывести ошибки PHP на экран?
У меня возникла проблема с отображением ошибок на PHP. Я проверил свой файл конфигурации PHP (php.ini
) и убедился, что display_errors
включен, а уровень отчета об ошибках установлен на E_ALL
. Я также перезапустил веб-сервер Apache.
Я даже добавил следующие строки в начало своего скрипта, но это не помогает - они не ловят даже простые синтаксические ошибки. Например, я объявляю переменные с помощью символа "$"
и не закрываю команды с помощью ";"
. В результате все мои скрипты показывают пустую страницу при возникновении таких ошибок, но я хочу, чтобы фактически были видны ошибки в выводе браузера.
Вот код, который я добавил в начало моего скрипта:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Что еще можно сделать?
5 ответ(ов)
В файле php.ini установите следующее значение:
display_errors = On
После этого перезапустите веб-сервер.
Чтобы отображать все ошибки, вам нужно сделать следующее:
1. Включить эти строки в PHP-скрипте, который вы вызываете из браузера (обычно это index.php
):
error_reporting(E_ALL);
ini_set('display_errors', '1');
2.(a) Убедитесь, что в этом скрипте нет синтаксических ошибок
—или—
2.(b) Установите display_errors = On
в вашем файле php.ini
В противном случае скрипт не сможет выполнить эти 2 строки!
Вы можете проверить наличие синтаксических ошибок в вашем скрипте, выполнив (в командной строке):
php -l index.php
Если вы включаете скрипт из другого PHP-скрипта, то он будет отображать синтаксические ошибки во включаемом скрипте. Например:
index.php
error_reporting(E_ALL);
ini_set('display_errors', '1');
// Любые синтаксические ошибки здесь приведут к пустому экрану в браузере
include 'my_script.php';
my_script.php
adjfkj // Эта синтаксическая ошибка будет отображена в браузере
Некоторые провайдеры веб-хостинга позволяют изменять параметры PHP в файле .htaccess
.
Вы можете добавить следующую строку:
php_value display_errors 1
У меня была такая же проблема, как у вас, и это решение помогло.
Предупреждение: нижеприведенный ответ содержит фактические ошибки. Ничего не изменилось в обработке ошибок; необработанные исключения по-прежнему отображаются так же, как и другие ошибки. Предложенный подход следует использовать с осторожностью, так как он выводит ошибки без условий, независимо от настройки display_errors, и может представлять угрозу, раскрывая конфиденциальную информацию внешним пользователям на рабочем сайте.
Вы можете заметить, что все настройки для «отчета об ошибках» или «отображения ошибок» могут не работать в PHP 7. Это связано с тем, что обработка ошибок изменилась. Попробуйте следующее:
try {
// Ваш код
}
catch (Error $e) {
$trace = $e->getTrace();
echo $e->getMessage().' в '.$e->getFile().' на строке '.$e->getLine().' вызвано из '.$trace[0]['file'].' на строке '.$trace[0]['line'];
}
Или, чтобы поймать исключения и ошибки одновременно (это не является обратимо совместимым с PHP 5):
try {
// Ваш код
}
catch (Throwable $e) {
$trace = $e->getTrace();
echo $e->getMessage().' в '.$e->getFile().' на строке '.$e->getLine().' вызвано из '.$trace[0]['file'].' на строке '.$trace[0]['line'];
}
Да, это сработает. Используя следующий код:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
вы включаете вывод всех ошибок и предупреждений в вашем PHP-скрипте. error_reporting(E_ALL)
устанавливает уровень отчетности так, чтобы все ошибки, предупреждения и уведомления отображались. Команда ini_set('display_errors', 1)
обеспечивает отображение этих ошибок на экране. Это полезно для отладки во время разработки, но не рекомендуется использовать это в продуктивной среде, так как это может раскрыть конфиденциальную информацию о вашем приложении.
Когда использовать 'self' вместо '$this'?
UTF-8 на всех уровнях!
Функции startsWith() и endsWith() в PHP
Что такое потокобезопасность и непотокобезопасность в PHP?
Как получить расширение файла в PHP?