odbc_errormsg
không báo cáo các thông báo lỗi từ odbc_execute
cách thức được yêu cầu. Nó chỉ ném một cảnh báo. Vì vậy, tôi đã buộc phải viết một hack để phân tích cú pháp thông báo lỗi thông qua error_get_last
.error_get_last() và trình xử lý lỗi tùy chỉnh
Tôi đang sử dụng set_error_handler
và error_get_last
lợi nhuận NULL
trừ khi tôi hoặc là:
vô hiệu hóa xử lý lỗi của tôi,
hoặc làm cho nó trở
FALSE
.
Tôi cho rằng điều này là do trình xử lý lỗi dựng sẵn của PHP xử lý việc lưu trữ chi tiết lỗi ở đâu đó để chúng có thể được truy xuất sau này.
Có cách nào để mô phỏng hành vi như vậy trong trình xử lý lỗi tùy chỉnh của tôi để error_get_last()
có thể được sử dụng bình thường không?
Xin lưu ý Tôi đã biết một số cách để truy xuất thông tin lỗi bất kỳ lúc nào. Câu hỏi của tôi là làm thế nào để làm cho error_get_last
có thể sử dụng được.
Cập nhật: Tôi nghĩ mình tốt hơn muốn đăng một số mã.
PHP có error_get_last()
, cho phép thực hiện điều này:
@fopen('xxx');
var_dump(error_get_last());
... và có được điều này:
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)
}
này phá vỡ nếu bạn thay thế xử lý lỗi BUILTIN:
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
Nếu bạn giữ cả hai trình xử lý lỗi ...
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;
... bạn sẽ có được tác dụng phụ:
[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
... thay vì chỉ:
[Error happened: Undefined variable: foo]
Tôi muốn xử lý lỗi tùy chỉnh của tôi để giao tiếp đúng với error_get_last
. Tôi muốn error_get_last
hoạt động tốt.
Bạn có chấp nhận sử dụng chức năng khác (do người dùng xác định) không? Bởi vì nếu bạn muốn, bạn chỉ có thể lưu trữ lỗi cuối cùng trong một var toàn cục, và có một hàm chỉ trả về $ GLOBALS ['varname']; ' – DaveRandom
Trả về 'false' không được chấp nhận? Nếu vậy, tại sao? – Jon
Ngoài ra, bạn đã thử gán giá trị cho ['$ php_errormsg'] (http://uk.php.net/manual/en/reserved.variables.phperrormsg.php) chưa? Tôi không có ý tưởng nếu điều này sẽ đạt được (hoặc thậm chí ảnh hưởng) bất cứ điều gì, nhưng nó có thể là giá trị một thử ... – DaveRandom