4

外部サイトへの API 呼び出しを行う PHP スクリプトに取り組んでいます。ただし、このサイトが利用できない場合、またはリクエストがタイムアウトした場合、関数が false を返すようにしたいと考えています。

以下を見つけましたが、「file_get_contents」を使用して外部ファイル呼び出しのコンテンツを取得するため、スクリプトに実装する方法がわかりません。

関数またはコマンド PHP の実行時間を制限する

   $fp = fsockopen("www.example.com", 80);
if (!$fp) {
    echo "Unable to open\n";
} else {

    fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
    stream_set_timeout($fp, 2);
    $res = fread($fp, 2000);

    $info = stream_get_meta_data($fp);
    fclose($fp);

    if ($info['timed_out']) {
        echo 'Connection timed out!';
    } else {
        echo $res;
    }

}

(出典: http://php.net/manual/en/function.stream-set-timeout.php )

このような問題にどのように対処しますか?ありがとう!

4

4 に答える 4

2

PHP 関数のcURLファミリを使用することをお勧めします。次に、次を使用してタイムアウトを設定できますcurl_setopt()

curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,2); // two second timeout

これにより、curl_exec()関数はタイムアウト後に FALSE を返します。

一般に、cURL を使用することは、どのファイル読み取り関数よりも優れています。より信頼性が高く、より多くのオプションがあり、セキュリティ上の脅威とは見なされません。多くのシステム管理者はリモート ファイル読み取りを無効にしているため、cURL を使用するとコードの移植性と安全性が向上します。

于 2010-01-13T13:35:30.240 に答える
0
<?php
$fp = fsockopen("www.example.com", 80);

if (!$fp) {
    echo "Unable to open\n";
} else {
    stream_set_timeout($fp, 2); // STREAM RESOURCE, NUMBER OF SECONDS TILL TIMEOUT
    // GET YOUR FILE CONTENTS
}
?>
于 2010-01-13T13:42:00.350 に答える
0
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 4);
if ($fp) {
    stream_set_timeout($fp, 2);
}
于 2010-01-13T16:17:24.890 に答える
0

File_Get_Contentsの PHP マニュアルから(コメント):

<?php 
$ctx = stream_context_create(array( 
    'http' => array( 
        'timeout' => 1 
        ) 
    ) 
); 
file_get_contents("http://example.com/", 0, $ctx); 
?>
于 2010-01-13T13:31:50.403 に答える