Как я могу получить полезные сообщения об ошибках в PHP? - PullRequest
538 голосов
/ 10 мая 2009

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

Очень трудно понять, что пошло не так. Я заканчиваю тем, что комментирую код, везде вводю «эхо» и т. Д., Пытаясь сузить проблему. Но наверняка должен быть лучший путь, верно?

Итак, есть ли способ заставить PHP генерировать полезное сообщение об ошибке, как это делает Java? Кто-нибудь может порекомендовать хорошие советы и приемы отладки PHP?

Ответы [ 26 ]

12 голосов
/ 19 августа 2014
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);

Кроме того, вы можете получить более подробную информацию с помощью xdebug .

11 голосов
/ 04 декабря 2017
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
9 голосов
/ 10 мая 2009
error_reporting(E_ALL | E_STRICT);

И включить отображение ошибок в php.ini

8 голосов
/ 10 мая 2009

Вы можете зарегистрировать свой собственный обработчик ошибок в PHP. Например, выгрузка всех ошибок в файл может помочь вам в этих непонятных случаях. Обратите внимание, что ваша функция будет вызываться независимо от того, на что установлена ​​ваша текущая error_reporting . Очень простой пример:

function dump_error_to_file($errno, $errstr) {
    file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');
6 голосов
/ 18 июня 2014

Вы также можете попробовать PHPStorm в качестве редактора кода. Он найдет много PHP и других синтаксических ошибок, как вы печатаете в редакторе.

6 голосов
/ 10 июня 2014

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

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

Как отмечают другие участники, по соображениям безопасности они отключены по умолчанию. Полезный совет: когда вы настраиваете свой сайт, удобно переключаться между различными средами, чтобы эти ошибки были включены по умолчанию в локальных средах и средах разработки. Это может быть достигнуто с помощью следующего кода (в идеале, в вашем index.php или конфигурационном файле, так что он активен с самого начала):

switch($_SERVER['SERVER_NAME'])
{
    // local
    case 'yourdomain.dev':
    // dev
    case 'dev.yourdomain.com':
        ini_set('display_errors',1);
        error_reporting(E_ALL);
    break;
    //live
    case 'yourdomain.com':
        //...
    break;
}
5 голосов
/ 10 ноября 2014

если вы пользователь Ubuntu, перейдите на свой терминал и выполните эту команду

sudo tail -50f /var/log/apache2/error.log

, где будут отображаться последние 50 ошибок. Для apache2 существует файл ошибок error.log, в котором регистрируются все ошибки.

5 голосов
/ 10 мая 2009

FirePHP также может быть полезным.

3 голосов
/ 10 мая 2009

Чтобы включить полный отчет об ошибках, добавьте это в ваш скрипт:

error_reporting(E_ALL);

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

ini_set('display_errors', '1');

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

3 голосов
/ 01 февраля 2014

«ОШИБКИ» - это самые полезные вещи для разработчиков, чтобы они знали свои ошибки и исправляли их, чтобы система работала идеально.

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

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

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

Еще один способ использовать инструменты отладки, такие как xdebug , в вашей среде IDE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...