1

ちょっと私は人々がそれらのそれぞれを推奨しているのを見てきました。

私が話しているのは、応答を送り返し、他のタスクを実行するのにどちらが適しているかということです。本当に良い方法は何なのか、そしてその理由は何なのか疑問に思いました。

編集: register_shutdown_function のドキュメントで、誰かが次のメソッドを公開しました:

<?php 
function endOutput($endMessage){ 
    ignore_user_abort(true); 
    set_time_limit(0); 
    header("Connection: close"); 
    header("Content-Length: ".strlen($endMessage)); 
    echo $endMessage; 
    echo str_repeat("\r\n", 10); // just to be sure 
    flush(); 
} 

// Must be called before any output 
endOutput("thank you for visiting, have a nice day'); 

sleep(100); 
mail("you@yourmail.com", "ping", "im here"); 
?>

私が述べた機能のどれよりも優れているでしょうか?

4

2 に答える 2

1

ignore_user_abort() は、ユーザーが切断したときに実行を終了しないように PHP/Apache に指示します。register_shutdown_function を使用すると、PHP のシャットダウン中にクリーンアップを行うことができます。

register_shut_down は、PHP の通常のシャットダウン ルーチンでは対応できないクリーンアップを行う必要がある場合にのみ役立ちます。たとえば、手動で作成されたロック ファイルを削除したり、どこかの DB レコードを少し反転したりします。

于 2012-05-13T16:32:24.303 に答える
0

古いバージョンのPHP(Apacheでは<4.1.0)では、register_shutdown_function()は、シャットダウン関数が実行される前に接続が閉じられたことを確認します。これはもはや当てはまりません。編集中のendOutput()関数は、出力バッファーを開いていない限り、実際に必要な処理を実行する必要があります。ただし、スクリプトは必要に応じて永久に実行できるように設定されているため、無限ループに入った場合(特にデバッグ中)は煩わしい場合があります。set_time_limit()を変更して、スクリプトにかかる秒数を実際に反映する値を使用することをお勧めします。

必要がない場合は、register_shutdown_function()を避けるのがおそらく最善です。これは、他の奇妙な動作(最初のシャットダウン関数がexit()を呼び出した場合に実行するシャットダウン関数の2番目のレイヤーを追加できないなど)があるためです。

于 2012-05-13T16:39:40.180 に答える