ホームページ >php教程 >php手册 >PHPの魔法のfastcgi_finish_request

PHPの魔法のfastcgi_finish_request

WBOY
WBOYオリジナル
2016-06-13 12:10:191562ブラウズ

少し複雑に聞こえるかもしれません。いくつかの例で説明してみましょう:

コードをコピー コードは次のとおりです:


echo '例:';
fastcgi_finish_request();
echo 'それが問題です。'; 、'生存か破壊か、それが問題です。
?>

このスクリプトを (コマンド ラインではなく) 実行すると、対応する文字列が出力されないことがわかりました。ですが、対応するファイルが生成されます。これは、fastcgi_finish_request を呼び出した後、クライアントの応答が終了したが、同時にサーバー スクリプトが実行し続けていることを示しています。
この機能を適切に使用すると、ユーザー エクスペリエンスが大幅に向上します。別の例を示します。

コードをコピーします。 コードは次のとおりです。

echo '例:';
file_put_contents('log.txt', date('Y-m-d H:i:s') . "ビデオ n をアップロード", FILE_APPEND) ;
fastcgi_finish_request( );
sleep(1); file_put_contents('log.txt', date('Y-m-d H:i:s') . "形式 n を変換",
sleep(1);
file_put_contents('log.txt', date('Y-m-d H:i:s') . "画像 n を抽出",
?>

時間のかかる操作をシミュレートするためにコード内でスリープが使用されています。ブラウジングはブロックされませんが、詳細についてはログを参照してください。

最後に、Yahoo が Web サイトの高速化のためのベスト プラクティスでバッファを早めにフラッシュすることについて言及したことを思い出させてください。これは、PHP のフラッシュ メソッドを使用して、コンテンツをできるだけ早くクライアントに送信することです。 surface と同じです。この記事で紹介した fastcgi_finish_request と少し似ていますが、本質的にはまったく異なるものですので、混同しないようにしてください。

追記: このメソッドを呼び出したとき、応答が送信され、接続が閉じられますが、フラッシュの呼び出しと比較すると、PHP の実行は終了しません。以前紹介したように、Echo の場合はこの方法がより簡単です。

さらに、コードの移植性の観点から、次のコードをコードに追加できます。



コードをコピー

コードは次のとおりです: if (!function_exists("fastcgi_finish_request")) { function fastcgi_finish_request() { }

}



非 fpm 環境ではコードのデプロイメントの問題が発生しません。

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