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

Адаптивный дизайн. Делаем сайты для любых устройств своими руками

Web

Как определить страну посетителя сайта по его IP адресу

Web

Что лучше использовать define() или const?