odbc_errormsg
не сообщает сообщения об ошибках от odbc_execute
так, как предполагалось. Это просто выдает предупреждение. Поэтому я был вынужден написать хак для анализа сообщения об ошибке через error_get_last
.
Я использую set_error_handler
и error_get_last
возвращает NULL
, если только я:
не отключу свой обработчик ошибок,
или не верну ЛОЖЬ
.
Я полагаю, это связано с тем, что встроенный обработчик ошибок PHP заботится о том, чтобы где-то сохранить подробности ошибки, чтобы их можно было получить позже.
Есть ли способ имитировать такое поведение в моем пользовательском обработчике ошибок, чтобы error_get_last ()
можно было использовать в обычном режиме?
Обратите внимание, что я уже знаю несколько способов получить информацию об ошибке в любое время. У меня вопрос, как сделать error_get_last
пригодным для использования.
Обновление: Думаю, лучше выложить код.
PHP имеет error_get_last ()
, что позволяет сделать это:
@fopen('xxx');
var_dump( error_get_last() );
... и получить следующее:
array(4) {
["type"]=>
int(2)
["message"]=>
string(46) "fopen() expects at least 2 parameters, 1 given"
["file"]=>
string(69) "C:\Documents and Settings\ALVARO.GONZALEZ\Mis documentos\tmp\test.php"
["line"]=>
int(3)
}
Это не работает, если вы замените встроенный обработчик ошибок:
function custom_error_handler($errno, $errstr, $errfile, $errline){
$ignore = ($errno & error_reporting()) == 0;
if(!$ignore){
echo "[Error happened: $errstr]\n";
}
return TRUE;
}
set_error_handler('custom_error_handler');
@fopen('xxx');
var_dump( error_get_last() ); // NULL
Если вы сохраните оба обработчика ошибок ...
function custom_error_handler($errno, $errstr, $errfile, $errline){
$ignore = ($errno & error_reporting()) == 0;
if(!$ignore){
echo "[Error happened: $errstr]\n";
}
return FALSE;
}
set_error_handler('custom_error_handler');
error_reporting(E_ALL);
echo $foo;
... вы получаете побочные эффекты:
[Error happened: Undefined variable: foo]
Notice: Undefined variable: foo in C:\Documents and Settings\ALVARO.GONZALEZ\Mis documentos\tmp\test.php on line 15
Call Stack:
0.0004 329720 1. {main}() C:\Documents and Settings\ALVARO.GONZALEZ\Mis documentos\tmp\test.php:0
... вместо просто:
[Error happened: Undefined variable: foo]
Я хочу, чтобы мой собственный обработчик ошибок правильно взаимодействовал с error_get_last
. Я хочу, чтобы error_get_last
работал нормально.