Как я могу заставить PHP производить след на ошибки?

См. Python PEP 8 .

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

mixedCase позволяется только в контекстах, где это уже - преобладающий стиль

Переменные...

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

Лично, я отклоняюсь от этого, потому что я также предпочитаю mixedCase [более чем 111] для моих собственных проектов.

48
задан chaos 21 July 2009 в 02:34
поделиться

6 ответов

Xdebug печатает таблицу трассировки ошибок, и вам не нужно писать какой-либо PHP-код для ее реализации.

Обратной стороной является то, что вы должны установить его как расширение PHP .

45
ответ дан 7 November 2019 в 12:10
поделиться

Мой скрипт для установки обработчика ошибок, который производит обратную трассировку:

<?php
function process_error_backtrace($errno, $errstr, $errfile, $errline, $errcontext) {
    if(!(error_reporting() & $errno))
        return;
    switch($errno) {
    case E_WARNING      :
    case E_USER_WARNING :
    case E_STRICT       :
    case E_NOTICE       :
    case E_USER_NOTICE  :
        $type = 'warning';
        $fatal = false;
        break;
    default             :
        $type = 'fatal error';
        $fatal = true;
        break;
    }
    $trace = array_reverse(debug_backtrace());
    array_pop($trace);
    if(php_sapi_name() == 'cli') {
        echo 'Backtrace from ' . $type . ' \'' . $errstr . '\' at ' . $errfile . ' ' . $errline . ':' . "\n";
        foreach($trace as $item)
            echo '  ' . (isset($item['file']) ? $item['file'] : '<unknown file>') . ' ' . (isset($item['line']) ? $item['line'] : '<unknown line>') . ' calling ' . $item['function'] . '()' . "\n";
    } else {
        echo '<p class="error_backtrace">' . "\n";
        echo '  Backtrace from ' . $type . ' \'' . $errstr . '\' at ' . $errfile . ' ' . $errline . ':' . "\n";
        echo '  <ol>' . "\n";
        foreach($trace as $item)
            echo '    <li>' . (isset($item['file']) ? $item['file'] : '<unknown file>') . ' ' . (isset($item['line']) ? $item['line'] : '<unknown line>') . ' calling ' . $item['function'] . '()</li>' . "\n";
        echo '  </ol>' . "\n";
        echo '</p>' . "\n";
    }
    if(ini_get('log_errors')) {
        $items = array();
        foreach($trace as $item)
            $items[] = (isset($item['file']) ? $item['file'] : '<unknown file>') . ' ' . (isset($item['line']) ? $item['line'] : '<unknown line>') . ' calling ' . $item['function'] . '()';
        $message = 'Backtrace from ' . $type . ' \'' . $errstr . '\' at ' . $errfile . ' ' . $errline . ': ' . join(' | ', $items);
        error_log($message);
    }
    if($fatal)
        exit(1);
}

set_error_handler('process_error_backtrace');
?>

Предостережение: он бессилен повлиять на различные «Фатальные ошибки PHP» , поскольку Zend в своей мудрости решил, что они будут игнорировать set_error_handler () . Таким образом, вы по-прежнему получаете бесполезные ошибки, связанные только с конечным местоположением.

47
ответ дан 7 November 2019 в 12:10
поделиться

Вы можете использовать debug_backtrace

3
ответ дан 7 November 2019 в 12:10
поделиться

Как php, есть Xdebug и PHP DBG . У каждого есть свои преимущества и недостатки.

2
ответ дан 7 November 2019 в 12:10
поделиться
$backtrace = debug_backtrace();

Я написал небольшую статью об обратном прослеживании некоторое время назад

1
ответ дан 7 November 2019 в 12:10
поделиться

set_error_handler () + debug_backtrace () + debug_print_backtrace () в PHP5

{ {1}}
1
ответ дан 7 November 2019 в 12:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: