Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何找到一个;在第0行“未知”中没有堆栈帧而引发异常;在PHP中?_Php - Fatal编程技术网

我如何找到一个;在第0行“未知”中没有堆栈帧而引发异常;在PHP中?

我如何找到一个;在第0行“未知”中没有堆栈帧而引发异常;在PHP中?,php,Php,我正在用PHP处理一个大的(继承的)代码库,在第0行的Unknown中没有堆栈帧抛出的错误异常开始显示在每个页面的底部。我理解错误的含义:异常被抛出到无法抛出的地方。我甚至设法在调用关闭函数的过程中跟踪到它的发生 我已经把所有注册到register\u shutdown\u function的函数都放进了日志中,而这些函数中都没有。不幸的是,我似乎无法获得更多的信息;我知道最后一个成功调用的关闭函数是什么,但我不知道从那到错误发生点之间会执行什么代码。我甚至不知道PHP机器的哪一部分在调用最后一

我正在用PHP处理一个大的(继承的)代码库,在第0行的Unknown中没有堆栈帧抛出的错误
异常开始显示在每个页面的底部。我理解错误的含义:异常被抛出到无法抛出的地方。我甚至设法在调用关闭函数的过程中跟踪到它的发生

我已经把所有注册到
register\u shutdown\u function
的函数都放进了日志中,而这些函数中都没有。不幸的是,我似乎无法获得更多的信息;我知道最后一个成功调用的关闭函数是什么,但我不知道从那到错误发生点之间会执行什么代码。我甚至不知道PHP机器的哪一部分在调用最后一个关闭函数。它可能与日志框架、会话框架或半打东西有关


有人知道如何确定错误发生的位置吗?

这可能发生在没有堆栈帧的析构函数和异常处理程序中。但是,由于该消息非常有用,您唯一的选择就是尝试使用
echo
查找错误(可能还有
ob\u end\u flush()
)。可能是析构函数正在引发异常,或者正在调用引发异常的函数。找到bug函数后,在异常引发部分添加一个try…catch


请注意,如果框架使用自己的错误处理,则必须关闭PHP配置中的警告和通知。特别是如果您有类似的情况,因为它会将警告转换为异常。

当异常在异常处理程序或错误处理程序(可能也在关闭函数中)中引发时,会显示此消息


你应该寻找这些方法,看看这里是否没有什么奇怪的地方。

在一个部署到Ubuntu 11.04服务器、运行PHP5.3.5的web应用程序中遇到同样的错误后,才找到你的问题。我同意@Eisberg的说法,这个问题似乎是PHP5.3版本的问题,因为在我的应用程序部署到的其他环境中,以前的其他PHP版本没有出现过这个错误

正如@jmz所提到的,我还使用了一个错误处理程序,将错误转化为异常,以便在我的暂存服务器上进行调试

为了找出这种神秘行为的原因,我使用XDEBUG和我的IDE(Eclipse)调试了应用程序,发现我的一个库在没有设置会话数据的情况下试图访问和修改全局
$\u SESSION
变量。将我的代码包装在if语句中检查
isset($\u SESSION)
使问题消失

为什么异常没有像其他试图访问非设置变量时发生的错误一样,在浏览器中完全冒泡出来,这对我来说是一个完全的谜,尤其是当我在错误设置集以下时,但是改变
error\u reporting()
中的设置可能会有所不同

错误处理设置,供参考:

error_reporting(E_ALL | E_STRICT);
ini_set("display_errors", 1);
ini_set("html_errors", 1);

我也得到同样的错误消息。awardspace将MySQL数据库配额设置为50mb。使用PHPmyAdmin优化文件显示的大小为34 mb,但在cPanel上显示的大小为57mb。每次我访问我的网站时,出现这个错误消息,我所需要做的就是登录到awardspace,选择数据库、管理并重置文件权限。然后错误消息消失了,我的网站也备份了

我是在
PHPUnit
中得到这个问题的。我在
函数拆卸中添加了以下代码,帮助我获得实际错误。您应该将析构函数包装在try-catch块中,因为堆栈帧只有在异常到达析构函数外部时才会丢失。也许这也能帮助其他人


继承的代码是否使用set\u error\u handler()或set\u exception\u handler()函数?我不这么认为。对该函数的唯一引用是在Zend framework中的docstring中。PHP 5.3.6修复了这个问题,比如说“一点”。有关详细信息,请参阅。我有相同的问题,并将其分解为导致错误的if($foo)条件。这是因为$foo尚未设置。使用if(!empty($foo))将解决此问题。由于某些原因,同一代码不会在同一服务器上的旧应用程序中引发异常。新应用程序-出现错误-使用Symfony组件。我将看看PHP5.3(是的,仍然需要使用它)问题。但是看起来Symfony也在这里设置了一些特殊的错误报告?
function __destruct()
{
    try
    {
    /*
    your code
    */
    }
    catch(Exception $e)
    {
    echo $e->__toString();
    }
}