ホームページ  >  記事  >  バックエンド開発  >  PHPでの長い接続の実装

PHPでの長い接続の実装

WBOY
WBOYオリジナル
2016-08-08 09:31:051211ブラウズ

最近、大量のデータを実行するとタイムアウトを要求する PHP プログラムに遭遇したため、set_time_limit() 関数を使用して PHP ページの最大実行時間を設定しました。
スクリプトの実行を許可する秒数を設定します。これがデフォルトの場合、スクリプトは致命的なエラーを返します。デフォルトの制限は 30 秒です。または、php.ini で max_execution_time を定義することで、PHP ページの最大実行時間を設定できます。
set_time_limit() 関数が呼び出されると、タイムアウト カウンターがゼロから再スタートします。つまり、タイムアウトがデフォルトで 30 秒、スクリプトの実行パラメータまたは set_time_limit までに 25 秒の場合、タイムアウトが (20) に設定されている場合、スクリプトはタイムアウトするまで 45 秒間実行されます。
set_time_limit(900) この関数は現在のphpスクリプトの最大実行時間を指定します。設定値は900秒ですが、実際の最大実行時間はphp.iniのmax_execution_time値-現在のスクリプトの実行時間+設定となります。価値。
php.ini で max_execution_time=30 で、現在のスクリプトが 10 秒間実行された場合:
最大実行時間 = 30-10+900=920 秒。
このような変更後、PHP スクリプトは 200,000 レコードを正常に更新しました。
PHP スクリプトにアクセスするたびに、すべての PHP スクリプトが実行された後にのみ戻り結果が得られます。スクリプトを継続的に実行する必要がある場合は、操作の目的を達成するために PHP の長い接続を使用する必要があります。

各 PHP スクリプトには実行時間が制限されているため、 set_time_limit によってスクリプトの実行時間を無制限に設定し、次に、flush() と ob_flush() を使用してサーバー バッファをクリアし、スクリプトの戻り値を出力する必要があります。いつでも。

<?php
header("Content-Type: text/plain");
set_time_limit(0);

$infoString = "Hello World" . "\n";
while( isset($infoString) )
{
echo $infoString;
flush();
ob_flush();
sleep(5);
}
?>

実行すると、5 秒ごとに Hello World の行が取得されます。停止ボタンを押さないと、ブラウザは 1 行ずつ読み込み続けます。
この方法を通じて、ロボット クローラー、インスタント メッセージ ボード、その他のプログラムなど、多くの機能を完成させることができます。

上記では、PHP での長い接続の実装をその側面も含めて紹介しましたが、PHP チュートリアルに興味のある友人に役立つことを願っています。

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