gpt4 book ai didi

php - 为什么调用未定义函数时没有 PHP 错误?

转载 作者:可可西里 更新时间:2023-11-01 13:45:54 25 4
gpt4 key购买 nike

无论何时调用未定义的函数,都不会记录错误。相反,脚本只是停止执行。更糟糕的是,如果我运行 php -l filename.php,它表明没有语法错误。我正在使用自定义错误处理函数,但即使是第一行也从未到达。

当调用未定义的函数时,如何让它运行我的错误处理程序?

我使用的是 PHP 5.3.2-1。这是设置错误处理程序的代码:

error_reporting(-1);
$old_error_handler = set_error_handler( "userErrorHandler" );
set_exception_handler('exception_handler');

错误处理程序和异常处理程序都没有到达,尽管它们确实可以处理其他错误。

我想要这个的原因是我最终不得不在我的代码中放置调试语句以查看它在停止执行之前能走多远,与告诉我文件和行号的错误消息相比,这是一个缓慢的过程错误是。

最佳答案

用户错误处理程序无法捕获 fatal error 。

参见 http://php.net/manual/en/function.set-error-handler.php

具体部分:

The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.

根据 PHP 手册页上的评论,一种解决方法是测试关闭函数中的错误:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 0);

function shutdown(){
$isError = false;
if ($error = error_get_last()){
switch($error['type']){
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
$isError = true;
break;
}
}

if ($isError){
echo "Script execution halted ({$error['message']})";
} else {
echo "Script completed";
}
}

register_shutdown_function('shutdown');
?>

关于php - 为什么调用未定义函数时没有 PHP 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7897339/

25 4 0
文章推荐: php - 如何创建一个没有选定选项的多选框codeigniter
文章推荐: PHP 5.2 preg_match() 编译失败
文章推荐: css - 我应该如何制作一个不一定代表主题中断的分隔线
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com