ホームページ >バックエンド開発 >PHPチュートリアル >PHP エラー: 0 行目不明でスタック フレームなしで例外がスローされました[再版],thrownstack_PHP チュートリアル

PHP エラー: 0 行目不明でスタック フレームなしで例外がスローされました[再版],thrownstack_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:22:141327ブラウズ

PHP エラー: 行 0 の不明でスタック フレームなしで例外がスローされました[再版],thrownstack

From: NetEase Blog

私の知る限り、2 つのケースで、PHP は次のようなスタック エラーなしでスローされた例外を報告します。行 0 の Unknown のフレーム:

1) 例外キャプチャは set_Exception_handler ガイドを使用し、別の例外が例外内で実行されます

たとえば、次のコードでは、この問題が発生します:

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 関数内で $unknown; を印刷すると、それ自体が例外をスローし、その後 set_Exception_handler の例外_handler 関数を呼び出して、無限ループを作成します。

解決策: 例外内で別の例外を実行しないでください。

上記の問題は 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) デストラクターで例外をスローする

このバグを参照してください: http://bugs.php.net/bug.php?id=33598

次のコードはこのエラーを報告します。 リーリー

現在の解決策:

1. デストラクターで例外をスローしないでください。

2. 終了時にデストラクターが実行されるため、このクラスの設定を手動で解除して例外をキャッチする必要があります。

たとえば、上記の例では、最後に unset($test) の行を追加すると、プログラムは throw new Exception( 'test' ); を報告し、この例外をキャッチします。

上記の 2 つの状況は、PHP バージョン 5.2.11 で発生します。理由については、PHP のバグ 33598 が 2005 年に報告されたためだと思います。バグのステータスはクローズされており、公式はこれを考えていないことを示しています。はバグ、またはバグとして扱われません。

セッションを開いて何か問題がありますか?

このファイルが別のファイルに含まれていない場合。 。以下を試すことができます。

ファイルに UTF-8 エンコーディングを使用しないでください。 。

下のコードを上部に移動します。 。いずれにしても、含めた PHP ファイルには HTML コードがありません。

php.ini を確認し、SESSION 一時ファイルが保存されているパス、PHP からアクセスできるかどうかに注意してください。

sqlite データを読み取るときに thinkphp で中国語の文字化けが表示されるのはなぜですか?ご案内

エンコードが異なり、UTF-8のものとUnicodeのものがあるので、データベースに挿入するときはUTF-8にして、読み出すときはそのままUTF-8にしてください。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/850752.html技術記事 PHP エラー: 0 行目不明のスタック フレームなしで例外がスローされました[再版],thrownstack From: NetEase Blog 私の知る限り、PHP は 2 つのケースで例外を報告します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。