什么PHP错误级别会停止执行?

什么PHP错误级别会停止执行?,php,error-handling,exception-handling,Php,Error Handling,Exception Handling,我正在处理一个非常古老的遗留项目,在cron运行的脚本中的某个地方,发生了一些事情,停止了脚本,并在文件上留下了一个建议锁,这会在cron稍后运行的下一轮脚本中导致进一步的问题。根据或多或少的日志,我确定了脚本的哪一部分失败了,所以我将其包装在try-finally块中。然而,我很确定这是失败的部分,所讨论的文件继续被锁定,因此我怀疑发生了某种错误,例如E_错误,它像\异常一样不可捕获。我想用set\u error\u handler编写一个自定义错误处理程序,我必须定义错误类型来处理我只想处理

我正在处理一个非常古老的遗留项目,在cron运行的脚本中的某个地方,发生了一些事情,停止了脚本,并在文件上留下了一个建议锁,这会在cron稍后运行的下一轮脚本中导致进一步的问题。根据或多或少的日志,我确定了脚本的哪一部分失败了,所以我将其包装在try-finally块中。然而,我很确定这是失败的部分,所讨论的文件继续被锁定,因此我怀疑发生了某种错误,例如E_错误,它像\异常一样不可捕获。我想用
set\u error\u handler
编写一个自定义错误处理程序,我必须定义错误类型来处理我只想处理停止脚本执行的错误,我的问题在E\u错误旁边,哪些错误类型也会中断执行

set_error_handler('fatalErrorHandler', [E_ERROR]);

function fatalErrorHandler($errno, $errstr, $errfile, $errline){
     throw new \Exception($errstr." @$errfile:$errline", $errno);
}

/* ... */ 

try{
     // Likely defective code...
}catch(\Exception $e) {
     $cronlocklog->add("cron job failed with error: ".$e->getMessage());
} finally {
     flock($cronlockfd, LOCK_UN);
}

你为什么不检查一下错误日志,看看到底发生了什么?然后,您最好修复这个问题,因为即使在致命错误上调用了自定义错误处理程序,您也无法阻止停止脚本。致命意味着无法继续执行,尽管您有机会在执行停止前执行某些操作。@marekful我认为OP希望脚本在出错后停止,但希望脚本在出错后也释放锁仅供参考我只想注意,在>
PHP7
中,当发生
E_错误
E_可恢复错误
时,抛出异常的特殊子类型(
Error
)。假设您使用的是较旧版本的php,
E\u RECOVERABLE\u ERROR
将变成
E\u ERROR
,前提是您没有使用
set\u ERROR\u handler
函数设置要处理的内容。只有
E_ERROR
将停止执行(只有少数例外)。考虑到一些错误不能用<代码>错误< /代码>来恢复或捕获(即,如果内存用完),将永远停止执行。而不是异常处理,我将建议查看为什么要实现锁以及代码是否真正需要它。如果它导致了这么多问题,那么听起来它的实施过于热情了。