132-インタフェース要求タイムアウト処理
2243 ワード
一、curl方式アクセスHTTP
CURLは、HTTPプロトコルインタフェースにアクセスするためによく使用されるlibライブラリです.パフォーマンスが高く、同時サポート機能などもあります.
curl_setopt($ch,opt)は、主に(重要な)CURLOPT_を含むタイムアウトの設定を設定できます.TIMEOUTは、cURLで実行可能な最長秒数(重要)CURLOPT_を設定するTIMEOUT_MSは、cURLで実行できる最長ミリ秒数を設定する.(cURL 7.16.2に組み込まれている.PHP 5.2.3から使用可能)CURLOPT_CONNECTIMEOUT接続開始までの待ち時間は、0に設定されている場合は無制限です.CURLOPT_CONNECTTIMEOUT_MSが接続を試みるまでの待ち時間は、ミリ秒単位です.0に設定されている場合は、無制限に待機します.(cURL 7.16.2に登録されている.PHP 5.2.3から利用可能)CURLOPT_DNS_CACHE_TIMEOUTは、DNS情報をメモリに保存する時間を設定します.デフォルトは120秒です.
curl_setopt($ch, CURLOPT_TIMEOUT,60); //
curl_setopt($ch, CURLOPT_NOSIGNAL,1); // ,
curl_setopt($ch, CURLOPT_TIMEOUT_MS,200); // ,cURL 7.16.2 。 PHP 5.2.3
**その他のテクニック:**
二、フロー処理方式アクセスHTTP
curlに加えて,fsockopen,あるいはfile操作関数を用いてHTTPプロトコルの処理を行うことが多いので,このタイムアウト処理も必要である.
// Timeout in seconds
$timeout =5;
$fp = fsockopen("example.com",80, $errno, $errstr, $timeout);
if($fp){
fwrite($fp,"GET / HTTP/1.0\r
");
fwrite($fp,"Host: example.com\r
");
fwrite($fp,"Connection: Close\r
\r
");
stream_set_blocking($fp,true); // ,
stream_set_timeout($fp,$timeout); //
$info = stream_get_meta_data($fp);
while((!feof($fp))&&(!$info['timed_out'])){
$data .= fgets($fp,4096);
$info = stream_get_meta_data($fp);
ob_flush;
flush();
}
if($info['timed_out']){
echo "Connection Timed Out!";
}else{
echo $data;
}
}
$timeout = array(
'http'=> array(
'timeout'=>5// ,
)
);
$ctx = stream_context_create($timeout);
$text = file_get_contents("http://example.com/",0, $ctx);