Как получить ошибки PHP для отображения? - PullRequest
1574 голосов
/ 27 июня 2009

Я проверил мой файл инициализации PHP (php.ini) и установил ошибки отображения, а также отчет об ошибках E_ALL. Я перезапустил свой веб-сервер Apache.

Я даже поместил эти строки в начало моего скрипта, и он даже не ловит простые ошибки разбора. Например, я объявляю переменные с "$" и не закрываю операторы ";". Но все мои скрипты показывают пустую страницу с этими ошибками, но я действительно хочу видеть error в выводе моего браузера.

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

Что осталось сделать?

Ответы [ 26 ]

2985 голосов
/ 29 января 2014

Это всегда работает для меня:

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

Однако это не заставляет PHP отображать ошибки синтаксического анализа - единственный способ показать эти ошибки - изменить ваш php.ini с помощью следующей строки:

display_errors = on
149 голосов
/ 27 июня 2009

Вы не можете перехватить ошибки синтаксического анализа при включении вывода ошибок во время выполнения, потому что он анализирует файл перед тем, как фактически что-либо выполнить (и, поскольку во время этого он обнаружит ошибку, он ничего не выполнит). Вам нужно изменить фактическую конфигурацию сервера, чтобы display_errors был включен и использовался уровень approriate error_reporting. Если у вас нет доступа к php.ini, вы можете использовать .htaccess или аналогичный, в зависимости от сервера.

Этот вопрос может предоставить дополнительную информацию.

133 голосов
/ 08 января 2013

Внутри вашего php.ini :

display_errors = on

Затем перезапустите ваш веб-сервер.

92 голосов
/ 29 января 2014

Для отображения всех ошибок вам необходимо:

1. В PHP-скрипте, который вы вызываете из браузера, есть следующие строки (обычно index.php):

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

2. (A) Убедитесь, что в этом скрипте нет синтаксических ошибок

-или-

2. (B) Установите display_errors = On в свой php.ini

В противном случае он не может даже запустить эти две строки!

Вы можете проверить наличие синтаксических ошибок в вашем скрипте, запустив (в командной строке):

php -l index.php

Если вы включите скрипт из другого PHP-скрипта, то он будет отображать синтаксические ошибки в включенном скрипте. Например:

index.php

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

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';

my_script.php

adjfkj // This syntax error will be displayed in the browser
45 голосов
/ 18 мая 2013

Некоторые провайдеры веб-хостинга позволяют изменять параметры PHP в файле .htaccess.

Вы можете добавить следующую строку:

php_value display_errors 1

У меня была та же проблема, что и у вас, и это решение исправило ее.

36 голосов
/ 28 марта 2016

Вы можете обнаружить, что все настройки для «отчетов об ошибках» или «ошибок отображения» не работают в PHP 7. Это связано с тем, что обработка ошибок изменилась. Попробуйте вместо этого:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

Или, чтобы ловить исключения и ошибки за один раз (это не обратно совместимо с PHP 5):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}
31 голосов
/ 05 мая 2014

Это будет работать:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>
30 голосов
/ 04 мая 2016

Использование:

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

Это лучший способ написать это, но синтаксическая ошибка выдает пустой вывод, поэтому используйте консоль для проверки синтаксических ошибок. Лучший способ отладки PHP-кода - использовать консоль; запустите следующее:

php -l phpfilename.php
20 голосов
/ 26 сентября 2017

Установите это в вашем index.php файле:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
18 голосов
/ 31 марта 2015

Создайте файл с именем php.ini в папке, где находится ваш PHP-файл.

Внутри php.ini добавьте следующий код (я даю простую ошибку, показывая код):

display_errors = on

display_startup_errors = on
...