您好,欢迎访问一九零五行业门户网

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

php错误: exception thrown without a stack frame in unknown on line 0[转载],thrownstack来自:网易博客
就目前我的了解,在两种情况下,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处理了。
我这开启session错在哪儿?
如果这个文件不是被另一个文件包含调用的话。。你可以试试下面的做法。
文件不要用 utf-8 编码。。
把你下面的代码移到上面去。。反正你包含的 php 文件里面也没有 html 码。
检查你的 php.ini 注意 session 临时文件保存的路径,是否可以被 php 访问。
thinkphp在读取sqlite数据时为何会出现中文乱码?指点
编码不同,有的是utf-8,有的是unicode,所以会出现为乱码,插入数据库的时候设置成utf-8,读取出来也用utf-8就行了。
http://www.bkjia.com/phpjc/850752.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/850752.htmltecharticlephp错误: exception thrown without a stack frame in unknown on line 0[转载],thrownstack 来自:网易博客 就目前我的了解,在两种情况下,php会报 exceptio...
其它类似信息

推荐信息