2010-08-19 4 views
1

В предыдущем билете я asked about logging PHP errors in MySQL, который дает мне:PHP error_log ошибки в MySQL

function myErrorHandler($errno, $errstr, $errfile, $errline) 
{ 
     // mysql connect etc here... 
    $sql = "INSERT INTO `error_log` SET 
      `number` = ".mysql_real_escape_string($errno).", 
      `string` = ".mysql_real_escape_string($errstr).", 
      `file` = ".mysql_real_escape_string($errfile).", 
      `line` = ".mysql_real_escape_string($errline); 
    mysql_query($sql); 
    // Don't execute PHP internal error handler 
    return true; 
} 

// set to the user defined error handler 
$new_error_handler = set_error_handler("myErrorHandler"); 

я могу сделать эту работу, но только если он triggerred так:

trigger_error("message here"); 

Однако, я также хотите, чтобы обработчик ошибок вызывался для всех ошибок, таких как синтаксические ошибки, такие как:

echo "foo; 

Но эти ошибки являются просто выведенный на экран, что я делаю неправильно?

+0

Могу ли я спросить, почему вы хотите регистрировать такие ошибки? – Chris

+1

Вы не можете обрабатывать неустранимые фатальные ошибки с помощью обработчика ошибок php (а синтаксическая ошибка - неустранимая фатальная ошибка). Это просто невозможно. – ircmaxell

+0

Я хотел получить любую ошибку в моей системе, не требуя каких-либо изменений. В настоящий момент синтаксическая ошибка будет означать, что в настоящее время ничего не сообщается – robjmills

ответ

2

Обработать ошибки времени выполнения можно только с помощью специального обработчика ошибок. Ошибка echo "foo в вашем примере происходит, когда разбор (т. Е. Чтение) источника. Поскольку PHP не может полностью разобрать код, он также не может запустить обработчик ошибок при этой ошибке.

1

Если Вы вынуждены проверить, если синтаксис является правильным, Вы можете использовать функцию php_check_syntax с параметром имя_файла PHP Manual php_check_syntax

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

+0

Я использую php_check_syntax в волшебной функции автозагрузки, когда код находится в разработке, он много помогает во многих проблемах, неуловимо при некоторых обстоятельствах (фреймворки обработки ошибок далеки от хороших) :) – canni

0

Это действительно ужасный способ протоколирования ошибок

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

Давайте рассмотрим ваш код. Это вызовет ошибку MySQL (из-за плохо сформированного запроса), который вы никогда не увидите. Как и любые другие ошибки. Это то, о чем я говорю.

Смежные вопросы