处理程序php54在其,PHP:自定义错误处理程序-处理解析和致命错误

实际上,您可以处理解析错误和致命错误。 的确,不会调用通过set_error_handler()定义的错误处理函数。 做到这一点的方法是通过使用register_shutdown_function()定义一个关闭函数。 这是我在网站上工作的内容:

文件prepend.php(此文件将自动添加到所有php脚本中)。 有关将文件添加到PHP的提示,请参见下文。

set_error_handler("errorHandler");

register_shutdown_function("shutdownHandler");

function errorHandler($error_level, $error_message, $error_file, $error_line, $error_context)

{

$error = "lvl: " . $error_level . " | msg:" . $error_message . " | file:" . $error_file . " | ln:" . $error_line;

switch ($error_level) {

case E_ERROR:

case E_CORE_ERROR:

case E_COMPILE_ERROR:

case E_PARSE:

mylog($error, "fatal");

break;

case E_USER_ERROR:

case E_RECOVERABLE_ERROR:

mylog($error, "error");

break;

case E_WARNING:

case E_CORE_WARNING:

case E_COMPILE_WARNING:

case E_USER_WARNING:

mylog($error, "warn");

break;

case E_NOTICE:

case E_USER_NOTICE:

mylog($error, "info");

break;

case E_STRICT:

mylog($error, "debug");

break;

default:

mylog($error, "warn");

}

}

function shutdownHandler() //will be called when php script ends.

{

$lasterror = error_get_last();

switch ($lasterror['type'])

{

case E_ERROR:

case E_CORE_ERROR:

case E_COMPILE_ERROR:

case E_USER_ERROR:

case E_RECOVERABLE_ERROR:

case E_CORE_WARNING:

case E_COMPILE_WARNING:

case E_PARSE:

$error = "[SHUTDOWN] lvl:" . $lasterror['type'] . " | msg:" . $lasterror['message'] . " | file:" . $lasterror['file'] . " | ln:" . $lasterror['line'];

mylog($error, "fatal");

}

}

function mylog($error, $errlvl)

{

...do whatever you want...

}

如果PHP在任何脚本中发现错误,都会调用errorHandler()函数。 如果该错误迫使脚本立即关闭,则该错误由函数shutdownHandler()处理。

这正在我正在开发的网站上进行。 我尚未在生产中对其进行测试。 但是它目前正在捕获我在开发它时发现的所有错误。

我相信存在两次捕获相同错误的风险,每个功能捕获一次。 如果我在函数shutdownHandler()中处理的错误也被errorHandler()函数捕获,则可能会发生这种情况。

待办事项:

1-我需要使用更好的log()函数来优雅地处理错误。 因为我仍在开发中,所以我基本上将错误记录到数据库中并将其回显到屏幕上。

2-对所有MySQL调用实施错误处理。

3-为我的JavaScript代码实施错误处理。

重要笔记:

1-我在php.ini中使用以下行来自动将上述脚本添加到所有php脚本中:

auto_prepend_file = "/homepages/45/d301354504/htdocs/hmsee/cgi-bin/errorhandling.php"

它运作良好。

2-我正在记录并解决所有错误,包括E_STRICT错误。 我相信开发干净的代码。 在开发过程中,我的php.ini文件包含以下几行:

track_errors = 1

display_errors = 1

error_reporting = 2147483647

html_errors = 0

上线时,我会将display_errors更改为0,以减少用户看到难看的PHP错误消息的风险。

我希望这可以帮助别人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值