2012-05-13 1 views
1

こんにちは私は人々がそれぞれをお勧めしているのを見てきました。register_shutdown_functionまたはignore_user_abort?

私は、応答を返信して他のタスクを実行する方が良いと話しています。 私は本当により良い方法とその理由を考えました。

EDIT: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("[email protected]", "ping", "im here"); 
?> 

それは私が述べた機能のいずれかの後、より良いだろうか?

答えて

0

PHPの古いバージョン(< 4.1.0 Apache)では、register_shutdown_function()は接続が閉じられたことを確認してからシャットダウン機能が実行されたこれはもはやケースではない。あなたが編集したendOutput()関数は、出力バッファを開いていない限り、あなたが望むことを行うはずです。しかし、必要に応じてスクリプトを永遠に実行できるように設定しています。これは、無限ループ(特にデバッグ中)に入ると迷惑になる可能性があります。 set_time_limit()を変更して、実際にスクリプトが実行する秒数を反映する値を使用することができます。

register_shutdown_function()は、他の奇妙な動作(最初のシャットダウン関数が終了を呼び出した場合に実行するシャットダウン関数の2番目の層を追加できないなど)が必要ないため、 ())。

1

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

register_shut_downは、PHPの通常のシャットダウンルーチンが気にしないクリーンアップを行う必要がある場合にのみ便利です。

+0

ignore_user_abortは正しいアプローチですか? –

+4

ignore_user_abort()はバンジージャンプのランプに立ってジャンプすることを拒否していると考えてください。register_shutdown_functionは最後の意志と証言を峡谷の底まで下ろして書いています。 –

関連する問題