ホームページ  >  記事  >  php教程  >  致命的なエラー: PHP の register_shutdown_function を通じて致命的なエラーを記録します

致命的なエラー: PHP の register_shutdown_function を通じて致命的なエラーを記録します

WBOY
WBOYオリジナル
2016-06-21 08:50:111174ブラウズ

今日、PHP で致命的なエラーを記録したい場合、優れた関数を使用できることを発見しました。
これは register_shutdown_function と呼ばれるもので、概要は次のとおりです:
register_shutdown_function を使用すると、実行がシャットダウンされたときに呼び出すことができる別の関数を設定できます。つまり、スクリプトの実行が完了するか、予期せず終了して PHP の実行がシャットダウンされたときに、この関数が呼び出されます。スクリプトの先頭で変数を false に設定し、スクリプトの最後で true に設定する方法を使用して、PHP にコールバック関数を閉じてスクリプトが完了したかどうかを確認させます。はまだ false です。スクリプトの最後の行はわかっています。スクリプトは実行されなかったので、プログラムの実行時にどこかで終了したに違いありません。
例は次のとおりです。

<ol class="dp-c">
<li class="alt"><span><span>?php </span></span></li>
<li><span><span class="vars">$clean</span><span> = false; </span></span></li>
<li class="alt"><span><span class="keyword">function</span><span> shutdown_func(){ </span></span></li>
<li><span><span class="keyword">global</span><span> </span><span class="vars">$clean</span><span>; </span></span></li>
<li class="alt"><span><span class="keyword">if</span><span> (!</span><span class="vars">$clean</span><span>){ </span></span></li>
<li><span><span class="keyword">die</span><span>(</span><span class="string">"not a clean shutdown"</span><span>); </span></span></li>
<li class="alt"><span>} </span></li>
<li><span><span class="keyword">return</span><span> false; </span></span></li>
<li class="alt"><span>} </span></li>
<li><span>register_shutdown_function(<span class="string">"shutdown_func"</span><span>); </span></span></li>
<li class="alt"><span><span class="vars">$a</span><span> = 1; </span></span></li>
<li><span><span class="vars">$a</span><span> = </span><span class="keyword">new</span><span> FooClass(); </span><span class="comment">// 将因为致命错误而失败</span><span> </span></span></li>
<li class="alt"><span><span class="vars">$clean</span><span> = true; </span></span></li>
<li><span>?> </span></li>
<li class="alt"><span>再来一个记录fatal error的例子 </span></li>
<li><span><span class="keyword">function</span><span> catch_fatal_error() </span></span></li>
<li class="alt"><span>{ </span></li>
<li><span><span class="vars">$last_error</span><span> = error_get_last(); </span></span></li>
<li class="alt"><span><span class="comment">// 检查是否属于fatal_error</span><span> </span></span></li>
<li><span><span class="keyword">if</span><span>(isset(</span><span class="vars">$last_error</span><span>[</span><span class="string">'type'</span><span>]) &&</span><span class="vars">$last_error</span><span>[</span><span class="string">'type'</span><span>]==E_ERROR) </span></span></li>
<li class="alt"><span>{ </span></li>
<li><span><span class="comment">//相关的处理</span><span> </span></span></li>
<li class="alt"><span>} </span></li>
<li><span>} </span></li>
<li class="alt"><span>register_shutdown_function(<span class="string">'catch_fatal_error'</span><span>); </span></span></li>
</ol>


注:
1. register_shutdown_function() 関数は繰り返し呼び出すことができますが、実行順序は登録順序と同じです
2. register_shutdown_function() 関数を呼び出す前に exit() 関数呼び出しがある場合、 register_shutdown_function() 関数は実行されません
3. PHP4 は登録された関数パラメータの受け渡しをサポートします
4. Apache などの一部のサーバーでは、現在のディレクトリは register_shutdown_function() 関数で変更できます
5. register_shutdown_function() 関数はヘッダーの送信後に実行されます

この記事のリンク http://www.cxybl.com/html/wlbc/Php/20130318/37221.html



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。