只需在发出通知/警告时停止脚本执行

时间:2015-09-25 15:01:16

标签: php

如何安排脚本执行在发出通知/警告时停止,而不改变其他行为,包括通知/警告消息,例如,没有抛出异常。

Stop script execution upon notice/warning是一个不同的问题。

2 个答案:

答案 0 :(得分:1)

直接回答你的问题是NO你不能    您必须创建一个停止执行的自定义错误处理程序    因为没有办法在外面这样做。

答案 1 :(得分:0)

您可以创建自定义错误处理函数,如下所示:

<?php
// error handler function
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    if (!(error_reporting() & $errno)) {
        // This error code is not included in error_reporting
        return;
    }

    switch ($errno) {
        case E_USER_ERROR:    exit('Im a user error.');
        case E_USER_WARNING:  exit('Im a user warning');
        case E_USER_NOTICE:   
              printNotice($errno, $errstr, $errfile, $errline);
              break;
        default:              exit('Unknown Error');
    }

    // don't execute PHP internal error handler
    return true;
}

function printNotice($errno, $errstr, $errfile, $errline)
{
    // use the following vars to output the original error
    var_dump($errno, $errstr, $errfile, $errline);

    exit;
}

重要的是常量:E_USER_NOTICEE_USER_WARNING

function printNotice()显示了如何打印原始错误, 因此它看起来未修改,然后停止脚本执行退出。 所有原始错误数据(消息,行号等)都在变量中 $ errno,$ errstr,$ errfile,$ errline。 PHP使错误数据在注册的错误处理程序(此处为myErrorHandler)中自动可用。 在这个例子中,我将第二次转发所有参数,printNotice()函数,它可以不同地格式化错误或者做你喜欢的事情。

然后将其注册到set_error_handler(),如下所示:

<?php
// register your error handler
set_error_handler('myErrorHandler');

为了测试错误处理,您可以使用函数trigger_error():

trigger_error("This is a User Error", E_USER_ERROR);
trigger_error("This is a User Warning", E_USER_WARNING);
trigger_error("This is a User Warning", E_USER_NOTICE);