Edw*_*ard 12 php error-handling
将指令设置display_errors为true(error_reporting设置为E_ALL)时会打印当前请求期间发生的所有错误.
由于我在我的PHP代码中发送标题,我得到了更多错误(在发送内容后发送标题是不可能的).
现在我想将错误消息添加到我的页面末尾.在那里,我想展示所有发生的错误(直到那时).不幸的是,error_get_last只返回发生的最后一个错误.
我首先想到set_error_handler可能会解决问题,但我担心我的错误记录不再起作用了:
重要的是要记住,对于error_types指定的错误类型,标准PHP错误处理程序是完全被绕过的,除非回调函数返回FALSE.
除此之外:
下面的错误类型不能与用户定义的函数来处理:E_ERROR,E_PARSE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,最E_STRICT的其中的set_error_han dler()被调用的文件中提出.
但也许他们也没有 error_get_last()
那么有没有办法在输出生成的内容后打印所有错误?
有一个关于这个讨论,在这里和这里(其中包括),与后者的名单上第二个答案使用的混合set_error_handler()使用register_shutdown_function()是一个很好的解决方案.
只要:错误处理仍然有效:
回调函数返回FALSE
function myErrorHandler($error_level, $error_message, $error_file, $error_line, $error_context) {
// Do your stuff here, e.g. saving messages to an array
// Tell PHP to also run its error handler
return false;
}
Run Code Online (Sandbox Code Playgroud)
存储所有错误号(在外部数组中$error_list)的一种解决方案可能是:
$error_list = array();
$myErrorHandler = function ($error_level, $error_message, $error_file, $error_line, $error_context) use (&$error_list) {
$error_list[] = $error_level;
// Tell PHP to also run its error handler
return false;
};
// Set your own error handler
$old_error_handler = set_error_handler($myErrorHandler);
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用例外.函数set_error_handler()的注释中有一个很好的例子
另见:
正如Egg已经提到:使用register_shutdown_function()是很长的路要走,而在答案代码/sf/answers/511972121/告诉您如何.
但请记住,那
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |