Web

Как получать полезные сообщения об ошибках в PHP?

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

Очень сложно понять, что пошло не так. Я обычно комментирую код, помещаю вызовы echo и т. д., пытаясь сузить проблему. Но ведь должен быть более лучший способ?

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

 

Ответ 1

Для синтаксических ошибок вам необходимо включить отображение ошибок в php.ini. По соображениям безопасности они по умолчанию отключены. В документации PHP для получения информации используйте директивы: error_reporting и display_errors, возможно, это поможет. Если вы не можете изменить php.ini, можно добавить следующие строки в файл .htaccess:

php_flag  display_errors        on

php_value error_reporting       2039

 

 

Можно рассмотреть возможность использования значения E_ALL для вашей версии PHP в error_reporting, чтобы получать все ошибки. 

Также есть несколько дополнительных вариантов:

  1. Проверить файл журнала ошибок, так как он будет содержать все ошибки (если ведение журнала не было отключено). 

  2. Добавление следующих строк поможет вам отладить не синтаксические ошибки:

error_reporting(-1);

ini_set('display_errors', 'On');

 

  1. Использовать редактор, который проверяет наличие ошибок при вводе кода, например, PhpEd. PhpEd также поставляется с отладчиком, который может предоставить более подробную информацию (отладчик PhpEd очень похож на xdebug и интегрируется непосредственно в редактор).

 

Ответ 2

Следующие строки разрешают все ошибки:

 

 

 

 

Ответ 3

Следующий код должен отображать все ошибки:

<?php

 

// Отображение ошибок

ini_set('display_errors', 'On');

ini_set('html_errors', 0);

 

// Отчеты об ошибках

error_reporting(-1);

 

// Обработчик завершения работы

function ShutdownHandler() {

    if(@is_array($error = @error_get_last())) {

        return(@call_user_func_array('ErrorHandler', $error));

    };

    return TRUE;

};

 

register_shutdown_function('ShutdownHandler');

 

// Обработчик ошибок

function ErrorHandler($type, $message, $file, $line) {

    $_ERRORS = Array(

        0x0001 => 'E_ERROR',

        0x0002 => 'E_WARNING',

        0x0004 => 'E_PARSE',

        0x0008 => 'E_NOTICE',

        0x0010 => 'E_CORE_ERROR',

        0x0020 => 'E_CORE_WARNING',

        0x0040 => 'E_COMPILE_ERROR',

        0x0080 => 'E_COMPILE_WARNING',

        0x0100 => 'E_USER_ERROR',

        0x0200 => 'E_USER_WARNING',

        0x0400 => 'E_USER_NOTICE',

        0x0800 => 'E_STRICT',

        0x1000 => 'E_RECOVERABLE_ERROR',

        0x2000 => 'E_DEPRECATED',

        0x4000 => 'E_USER_DEPRECATED'

    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS)))) {

        $name = 'E_UNKNOWN';

    };

    return(print(@sprintf("%s Ошибка в файле \xBB%s\xAB в строке %d: %s\n", $name, @basename($file), $line, $message)));

};

$old_error_handler = set_error_handler("ErrorHandler");

// далее ваш код

?>

 

Единственный способ получить пустую страницу с этим кодом - это когда у вас есть ошибка в обработчике завершения работы. 

Схожие статьи

Клиент-серверная архитектура: что это такое и для чего ее используют?
Web

Клиент-серверная архитектура: что это такое и для чего ее используют?

Облачные решения: как работает облачный сервис и зачем он нужен?
Web

Облачные решения: как работает облачный сервис и зачем он нужен?

Web

Преобразовать разделенных двоеточиями массив ключ: значение в массив с ключами

Web

Стоит ли использовать геттеры/сеттеры в PHP

×