重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

PHPで、あるwebサイト(仮にfoo.comとします)にアクセスして情報を取ってくる、という
スクリプトを書いています。
この際、foo.comが落ちている等の理由でアクセスできなかった場合の
タイムアウトを作りたいのですが、set_time_limitを使ったところ
うまくいきません。下記の例で行けば、
「5秒以内にfoo.comへコネクトし、データを512バイト読み込み終わらなければ
 スクリプトを強制終了する」
ということを考えているのですが、現実にはhttpを見に行ったまま
5秒以上たって、終了されません。
何かうまい方法を教えていただけませんでしょうか?
なお、バージョンはPHP4.0.4pl2, OSはredhat6.2Jです。

以下に、スクリプトを書きます。

<?
set_time_limit(5);
error_reporting(0);
$file = fopen("http://foo.rom", "r");
$line = fread($file, 512);
fclose($file);
print("$line");
?>

宜しくお願いいたします。

A 回答 (1件)

PHPのマニュアルを見てみますと、「 fsockopen() 」という関数が


あるので、それを使ったほうがいいかもしれません。
これですと、ずばりタイムアウトするまでの時間を秒単位で指定できます。
マニュアルのサンプルですと、こんなのでした。

$fp = fsockopen ("foo.com", 80, &$errno, &$errstr, 5);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, "GET / HTTP/1.0\r\n\r\n");
while (!feof($fp)) {
echo fgets ($fp,4096);
}
fclose ($fp);
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!