PHP はブラウザから積極的に切断します
私はかつて、ブラウザクライアントが切断されたときのサーバーPHPスクリプトの処理を説明する「PHP接続処理におけるset_time_limit()、connection_status()、およびignore_user_abort()の詳細な分析」という記事をまとめました。
この記事では、サーバー PHP スクリプトがブラウザからアクティブに切断する方法について説明します。主な方法は、http プロトコル ヘッダーで Content-Length と Connection を使用することです。
Content-Length の役割: ブラウザは、指定された Content-Length サイズのメッセージ エンティティを受信した後、サーバーから切断されます。接続の役割: ブラウザは、接続の Close または Keep-Alive を受信した後、接続を閉じるか、次のリクエストで現在の接続を使用し続けるかを決定します。
/**
*ブラウザから自動的に切断されます
* jiaofuyou
*/
echo '1234567890' //ブラウザへのコンテンツ出力
;
{//コードを切断します$size=ob_get_length();
header("Content-Length: $size"); //ブラウザがこの長さのデータを受信すると、データを受信しなくなります
header("Connection: Close"); //現在の接続を閉じるようにブラウザに指示します。これは短い接続です
ob_flush();
flush();
}
error_log(date("[Y-m-d H:i:s]")." > "."start" ."n", 3 , "/usr/local/apache2219/logs/php_log");
//切断後に長時間の操作を実行する
睡眠(5);
echo 'test213';//ブラウザが受信できません
error_log(date("[Y-m-d H:i:s]")." > "."end" ."n", 3 , "/usr/local/apache2219/logs/php_log");
//5秒遅れてエラーログが実行されたか確認できます
?>
説明:
1. Content-length を単独で使用する場合、ブラウザは実際に接続を閉じるように指示するだけで、情報の受信を停止します。
2. file_get_contents には Content-Length の指定は意味がありません。使用したい場合は、curl を使用してください。
PHP がコンテンツをブラウザーに継続的に出力したい場合:
「1234567890」をエコー
ob_flush();
flush();
これはすぐにはブラウザに出力されません、このようにすることができます
エコー「1234567890
」
「」
//改行がある場合はすぐにブラウザに出力されますob_flush();
flush();
または:
「1234567890」をエコー
print str_pad("",10000) //十分な内容を出力します
ob_flush();
flush();