PHP错误: Exception thrown without a stack frame in Unknown on line 0[转载]

来自:网易博客

就目前我的了解,在两种情况下,PHP会报 Exception thrown without a stack frame in Unknown on line 0这种错误:

1)异常捕捉用了set_exception_handler导向,Exception里面执行另一个Exception

如下面这段代码,就会出现这种问题:

http://de.php.net/manual/de/function.set-exception-handler.php#88082

function error_handler($code, $message, $file, $line)
{
    if (0 == error_reporting())
        return;

    throw new ErrorException($message, 0, $code, $file, $line);
}
function exception_handler($e)
{
    // ... normal exception stuff goes here
    print $undefined; // This is the underlying problem
}
set_error_handler("error_handler");
set_exception_handler("exception_handler");
throw new Exception("Just invoking the exception handler");

exception_handler函数内print $undefined;这行本身会抛出一个异常,而他又去调用set_exception_handler的exception_handler函数,死循环了。

解决办法:不要在一个Exception里面执行另一个Exception

上面的问题可以用try ... catch的方式,如exception_handler改成下面这样:

function exception_handler($e)
{
    try
    {
        // ... normal exception stuff goes here
        print $undefined; // This is the underlying problem
    }
    catch (Exception $e)
    {
        print get_class($e)." thrown within the exception handler. Message: ".$e->getMessage()." on line ".$e->getLine();
    }
}

2) 在析构函数抛出异常

参考这个bug:http://bugs.php.net/bug.php?id=33598

下面的代码就会报这个错误:

class test {
    function __construct() {
        echo "Construct\n";
    }

    function greet() {
        echo "Hello World\n";
    } 

    function __destruct() {
        echo "Destruct\n";
        throw new Exception( ‘test‘ );
    }
}

$test = new test();
$test->greet();

目前的解决办法:

1.不要在析构函数中抛出异常.

2.由于析构函数是在退出时执行的,所以要手动unset这种类,并catch该异常。

比如上面的例子,在最后加一行unset($test),这时程序就会报throw new Exception( ‘test‘ ); 这行有错误,再catch这个异常就行了。

上面两种情况在php 5.2.11版本上都会出现,至于原因我认为PHP可能就是这样处理的,php bug 33598 2005年就报上去了,bug Status为Closed,说明官方并不认为这是一个bug,或不当一个bug处理了。

PHP错误: Exception thrown without a stack frame in Unknown on line 0[转载],布布扣,bubuko.com

时间: 2024-08-07 21:16:40

PHP错误: Exception thrown without a stack frame in Unknown on line 0[转载]的相关文章

PHP "Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0" 错误

遇到这个问题,研究了很久,结果发现上传的文件的全部没有读权限 不只是文件夹,上传的文件也要至少添加+444的权限,也就是读的权限 Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0 Fatal error: Unknown: Failed opening required '/mnt/yun0/api/login.php' (include_path='.:/opt/lampp/lib/p

在php添加mongo过程中出现的mongo.so: > undefined symbol: php_json_encode in Unknown on line 0. After installation mongo driver for php 的错误

3 down vote my system is centos 6.3. I got the problem solved. vim /etc/php.ini then add extension=json.so before extension=mongo.so at last restart the php-fpm and nginx(apache) service php-fpm restart service ngxin restart It's OK!

spring boot 整合kafka 报错 Exception thrown when sending a message with key='null' and payload=JSON to topic proccess_trading_end: TimeoutException: Failed to update metadata after 60000 ms.

org.springframework.kafka.support.LoggingProducerListener- Exception thrown when sending a message with key='null' and payload='{"dataDts":["20180329","20180328","20180327","20180326","20180323"]

Selenium Grid 运行报错 Exception thrown in Navigator.Start first time ->Error forwarding the new session Empty pool of VM for setup Capabilities

Selenium Grid 运行报错 : Exception thrown in Navigator.Start first time ->Error forwarding the new session Empty pool of VM for setup Capabilities [{platform=WINDOWS, ensureCleanSession=true, ignoreProtectedModeSettings=true, ignoreZoomSetting=true, enab

Stack frame

http://en.citizendium.org/wiki/Stack_frame In computer science, a stack frame is a memory management strategy used to create and destroy temporary (automatic) variables in some programming languages. Among other things, use of a stack allows programm

How a stack frame works 栈帧

http://en.citizendium.org/wiki/Stack_frame To use a stack frame, a thread keeps two pointers, often called the Stack Pointer (SP), and the Frame (FP) or Base Pointer (BP). SP always points to the "top" of the stack, and FP always points to the &

在使用windows调用Hadoop 错误 /bin/bash: line 0: fg: no job control一般解决方法

在使用windows调用Hadoop yarn平台的时候,一般都会遇到如下的错误: 2014-05-28 17:32:19,761 WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Exception from container-launch with container ID: container_1401177251807_0034_01_000001 and exit code: 1 org.

Linux上coredump调试:call stack栈顶函数地址为0 分析实战

这几天测试中,又收到了coredump的报告,调用栈如下: (gdb) bt#0  0x0000000000000000 in ?? ()#1  0x0000000000432bb4 in ChargingNode::canProcessed (this=0x7f87b40118e0, maxTimestamp=9000000000) at src/sl/ChargingFile.C:406#2  0x0000000000445de4 in BucketFileAdapter::checkin

openwrt 编译软件包出现错误(is missing dependencies for the following libraries: libpthread.so.0)

install -m0755 /home/yanfa/workspace/trunk-wr703/build_dir/target-mips_r2_uClibc-0.9.33.2/lk_cnp_serial_eth/lk_cnp_serial_eth /home/yanfa/workspace/trunk-wr703/build_dir/target-mips_r2_uClibc-0.9.33.2/lk_cnp_serial_eth/ipkg-ar71xx/lk_cnp_serial_eth/b