PHPスクリプト終了コールバック関数
スクリプトは頻繁に機能しなくなるため、致命的なエラーや空白のページをユーザーに表示したくありません (display_errors がオフに設定されている場合)。 PHP は ? register_shutdown_function という関数を使用して、実行がシャットダウンされたとき、つまりスクリプトの実行が完了したとき、または予期せず終了して PHP の実行がシャットダウンされたときに呼び出すことができる別の関数を設定できます。したがって、スクリプトの先頭で変数を false に設定し、スクリプトの最後で true に設定する方法を使用して、PHP にコールバック関数を閉じさせて、スクリプトが呼び出されるかどうかを確認できます。変数がまだ false の場合は、スクリプトの最後の行が実行されなかったことがわかります。そのため、ユーザーに適切なフィードバックを提供する方法の非常に基本的な例を用意しました。致命的なエラーを表示する必要がある場合は、致命的なエラーの表示をオフにすることで、例の見栄えを良くすることができます (注釈: display_errors と error_reporting を設定できます)。 false;?関数? (){? $clean if?(! ){?die("not?a?clean?shutdown" }?return?false 例:<span style="color: #000000;"><span style="color: #0000bb;"><?php?<code><span style="color: #000000;"><span style="color: #0000bb;"><?php?<br>$clean?</span><span style="color: #007700;">=?</span><span style="color: #0000bb;">false</span><span style="color: #007700;">;?<br>function?</span><span style="color: #0000bb;">shutdown_func</span><span style="color: #007700;">(){?<br>global?</span><span style="color: #0000bb;">$clean</span><span style="color: #007700;">;?<br>if?(!</span><span style="color: #0000bb;">$clean</span><span style="color: #007700;">){?<br>die(</span><span style="color: #dd0000;">"not?a?clean?shutdown"</span><span style="color: #007700;">);?<br>}?<br>return?</span><span style="color: #0000bb;">false</span><span style="color: #007700;">;?<br>}?<br><br></span><span style="color: #0000bb;">register_shutdown_function</span><span style="color: #007700;">(</span><span style="color: #dd0000;">"shutdown_func"</span><span style="color: #007700;">);?<br><br></span><span style="color: #0000bb;">$a?</span><span style="color: #007700;">=?</span><span style="color: #0000bb;">1</span><span style="color: #007700;">;?<br></span><span style="color: #0000bb;">$a?</span><span style="color: #007700;">=?new?</span><span style="color: #0000bb;">FooClass</span><span style="color: #007700;">();?</span><span style="color: #ff8000;">// 将因为致命错误而失败<br></span><span style="color: #0000bb;">$clean?</span><span style="color: #007700;">=?</span><span style="color: #0000bb;">true</span><span style="color: #007700;">;?<br><br></span><span style="color: #0000bb;">?></span></span>
$clean?=?<span style="color: #000000;"><!DOCTYPE?html?PUBLIC?"-//W3C//DTD? XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">?<code><span style="color: #000000;"><!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">?<br><html?xmlns="http://www.w3.org/1999/xhtml">?<br><head>?<br><meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312"?/>?<br><title>register_shutdown_function示例</title>?<br></head>?<br><body>?<br><span style="color: #0000bb;"><?php?<br>$starttime</span><span style="color: #007700;">=</span><span style="color: #0000bb;">microtime</span><span style="color: #007700;">(</span><span style="color: #0000bb;">true</span><span style="color: #007700;">);?<br></span><span style="color: #0000bb;">www</span><span style="color: #007700;">.</span><span style="color: #0000bb;">phperz</span><span style="color: #007700;">.</span><span style="color: #0000bb;">com?<br></span><span style="color: #007700;">function?</span><span style="color: #0000bb;">Test</span><span style="color: #007700;">(){?<br></span><span style="color: #0000bb;">$starttime</span><span style="color: #007700;">=</span><span style="color: #0000bb;">microtime</span><span style="color: #007700;">(</span><span style="color: #0000bb;">true</span><span style="color: #007700;">);????<br>if(!</span><span style="color: #0000bb;">file_exists</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'Test.txt'</span><span style="color: #007700;">)){?????</span><span style="color: #ff8000;">//判断如果文件不存在!!?<br></span><span style="color: #0000bb;">$Str?</span><span style="color: #007700;">=?</span><span style="color: #0000bb;">fopen</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'Test.txt'</span><span style="color: #007700;">,</span><span style="color: #dd0000;">"w+"</span><span style="color: #007700;">);????????<br></span><span style="color: #0000bb;">fwrite</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$Str</span><span style="color: #007700;">,</span><span style="color: #dd0000;">'我是在最后写进来的.时间:$starttime'</span><span style="color: #007700;">);?<br></span><span style="color: #0000bb;">fclose</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$Str</span><span style="color: #007700;">);?<br>echo?</span><span style="color: #dd0000;">"创建完成!创建时间:</span><span style="color: #0000bb;">$starttime</span><span style="color: #dd0000;">"</span><span style="color: #007700;">;?<br>}?<br>else?{?</span><span style="color: #ff8000;">//如果存在;?<br></span><span style="color: #007700;">echo?</span><span style="color: #dd0000;">'文件已经存在'</span><span style="color: #007700;">;?<br>}?<br>}?<br></span><span style="color: #0000bb;">register_shutdown_function</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'Test'</span><span style="color: #007700;">);?<br>echo?</span><span style="color: #dd0000;">"程序开始:"</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$starttime</span><span style="color: #007700;">.</span><span style="color: #dd0000;">"<br>"</span><span style="color: #007700;">;?</span><span style="color: #0000bb;">phperz</span><span style="color: #007700;">~</span><span style="color: #0000bb;">com?<br><br></span><span style="color: #007700;">for(</span><span style="color: #0000bb;">$i</span><span style="color: #007700;">=</span><span style="color: #0000bb;">0</span><span style="color: #007700;">;</span><span style="color: #0000bb;">$i</span><span style="color: #007700;"><</span><span style="color: #0000bb;">1000</span><span style="color: #007700;">;</span><span style="color: #0000bb;">$i</span><span style="color: #007700;">++){?<br>echo?</span><span style="color: #dd0000;">"Echo<br/>"</span><span style="color: #007700;">;?<br>}?<br>exit;?<br></span><span style="color: #0000bb;">?>?<br></span></body>?<br></html></span>
?
register_shutdown_function の機能は、このページのすべてのスクリプトが実行された後に実行される関数を指定することです。 <span style="color: #000000;"><span style="color: #0000bb;"><?php?<code><span style="color: #000000;"><span style="color: #0000bb;"><?php?<br></span><span style="color: #007700;">function?</span><span style="color: #0000bb;">aaa</span><span style="color: #007700;">()?{?<br>echo?</span><span style="color: #dd0000;">'创建文件'</span><span style="color: #007700;">;?<br>if(</span><span style="color: #0000bb;">$ttt?</span><span style="color: #007700;">=?</span><span style="color: #0000bb;">fopen</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'D:/web_root/tx.txt'</span><span style="color: #007700;">,</span><span style="color: #dd0000;">"w+"</span><span style="color: #007700;">))</span><span style="color: #0000bb;"> </span><span style="color: #ff8000;">//此处要用绝对路径,用相对路径即无效。原因请看后面的解释?<br></span><span style="color: #007700;">{?<br></span><span style="color: #0000bb;">fwrite</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$ttt</span><span style="color: #007700;">,</span><span style="color: #dd0000;">'you?are?write?after?exit'</span><span style="color: #007700;">);?<br></span><span style="color: #0000bb;">fclose</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$ttt</span><span style="color: #007700;">);?<br>}?<br>}?<br><br></span><span style="color: #0000bb;">register_shutdown_function</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'aaa'</span><span style="color: #007700;">);</span><span style="color: #0000bb;"> </span><span style="color: #ff8000;">//?函数名称无需带括号,用引号包住即可。 当本页面所有语句都执行完成,或者超时时aa函数。?<br></span><span style="color: #007700;">exit();?<br></span><span style="color: #0000bb;">?></span></span>
aaa
()?{?echo?
'ファイルの作成'
;?
$ttt?
=?fopen
('D:/web_root/tx.txt', "w+"