odbc_errormsg
并没有像它应该的那样报告odbc_execute
中的错误消息,它只是抛出了一个警告。因此,我被迫编写了一个hack来通过error_get_last
解析错误消息。
我正在使用set_error_handler
,error_get_last
返回NULL
,除非我:
禁用我的错误处理程序,
或使其返回
FALSE
。
我想这是由于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
正常工作。
false
不可接受吗?如果是,为什么? - Jonerror_get_last()
。我只想编写一个自定义错误处理程序,不会破坏其他功能。/// 设置$php_errormsg
并不能防止error_get_last()
返回 NULL(我刚测试过)。 - Álvaro Gonzálezerror_get_last
的功能(即保存到某个变量中并稍后获取它)?乍一看,这似乎是最清洁的解决方案。 - Jonerror_get_last()
。 - Álvaro González