web-dev-qa-db-ja.com

PHP-file_get_contentsタイムアウトの設定

私は使っている file_get_contents外部ページのヘッダーを取得して、外部ページがオンラインであるかどうかを次のように判断します。

$URL = "http://page.location/";
$Context = stream_context_create(array(
'http' => array(
    'method' => 'GET',
)
));
file_get_contents($URL, false, $Context);
$ResponseHeaders = $http_response_header;

$header = substr($ResponseHeaders[0], 9, 3);

if($header[0] == "5" || $header[0] == "4"){
//do stuff
}

これは、ページの応答に時間がかかりすぎる場合を除いて、うまく機能しています。

タイムアウトを設定するにはどうすればよいですか?

file_get_headers return [〜#〜] false [〜#〜]まだ完了していない場合はPHP完了していない場合は、次の行に移動しますfile_get_contents リクエスト?

11
Xperplay

stream_context_array内にtimeoutキーを追加します

$Context = stream_context_create(array(
'http' => array(
    'method' => 'GET',
    'timeout' => 30, //<---- Here (That is in seconds)
)
));

あなたの質問....

file_get_headersは、まだ完了していない場合はFALSEを返し、file_get_contentsリクエストが完了していない場合はPHP次の行に移動しますか?

はい、以下の警告メッセージとともにFALSEを返します。

接続されたパーティが一定時間後に適切に応答しなかったために接続の試行が失敗したか、接続されたホストが応答しなかったために確立された接続が失敗しました。

10

この関数のタイムアウトを設定する方法の例を次に示します。

<?php
$ctx = stream_context_create(array(
    'http' => array(
        'timeout' => 1
        )
    )
);
file_get_contents("http://example.com/", 0, $ctx);
?>
12
Abed Hawa