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[转载],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
<span>function</span> error_handler(<span>$code</span>, <span>$message</span>, <span>$file</span>, <span>$line</span><span>) { </span><span>if</span> (0 == <span>error_reporting</span><span>()) </span><span>return</span><span>; </span><span>throw</span> <span>new</span> ErrorException(<span>$message</span>, 0, <span>$code</span>, <span>$file</span>, <span>$line</span><span>); } </span><span>function</span> exception_handler(<span>$e</span><span>) { </span><span>//</span><span> ... normal exception stuff goes here</span> <span>print</span> <span>$undefined</span>; <span>//</span><span> This is the underlying problem</span> <span>} </span><span>set_error_handler</span>("error_handler"<span>); </span><span>set_exception_handler</span>("exception_handler"<span>); </span><span>throw</span> <span>new</span> <span>Exception</span>("Just invoking the exception handler");
exception_handler函数内print $undefined;这行本身会抛出一个异常,而他又去调用set_exception_handler的exception_handler函数,死循环了。
解决办法:不要在一个Exception里面执行另一个Exception
上面的问题可以用try ... catch的方式,如exception_handler改成下面这样:
<span>function</span> exception_handler(<span>$e</span><span>) { </span><span>try</span><span> { </span><span>//</span><span> ... normal exception stuff goes here</span> <span>print</span> <span>$undefined</span>; <span>//</span><span> This is the underlying problem</span> <span> } </span><span>catch</span> (<span>Exception</span> <span>$e</span><span>) { </span><span>print</span> <span>get_class</span>(<span>$e</span>)." thrown within the exception handler. Message: ".<span>$e</span>->getMessage()." on line ".<span>$e</span>-><span>getLine(); } }</span>
2) 在析构函数抛出异常
参考这个bug:http://bugs.php.net/bug.php?id=33598
下面的代码就会报这个错误:
<span>class</span><span> test { </span><span>function</span><span> __construct() { </span><span>echo</span> "Construct\n"<span>; } </span><span>function</span><span> greet() { </span><span>echo</span> "Hello World\n"<span>; } </span><span>function</span><span> __destruct() { </span><span>echo</span> "Destruct\n"<span>; </span><span>throw</span> <span>new</span> <span>Exception</span>( 'test'<span> ); } } </span><span>$test</span> = <span>new</span><span> test(); </span><span>$test</span>->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处理了。
如果这个文件不是被另一个文件包含调用的话。。你可以试试下面的做法。
文件不要用 UTF-8 编码。。
把你下面的代码移到上面去。。反正你包含的 PHP 文件里面也没有 HTML 码。
检查你的 php.ini 注意 SESSION 临时文件保存的路径,是否可以被 PHP 访问。
编码不同,有的是utf-8,有的是Unicode,所以会出现为乱码,插入数据库的时候设置成utf-8,读取出来也用utf-8就行了。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

Dreamweaver Mac版
ビジュアル Web 開発ツール
