推しミネラルウォーターはありますか?

はじめして。
最大実行時間超過のエラーで困っています。

web上からファイルを取得する場合に、
$fcontents = @join('', file("$url"));
などとしていますが、
$urlのサーバーが落ちていたりすると、
最大スクリプト実行時間のエラーとなり、
繰り返し処理で連続してファイルを取得する場合に、
スクリプト全体が止まってしまって困っています。

処理の前に、一時的に
set_time_limit(300);
などとしても、結局その時間内にサーバーからの応答がないと
エラーとなってしまいます。

ある一定時間、サーバーからの応答がない場合、
その$urlの処理だけを飛ばすような方法がありましたらご教授ください。
宜しくお願い致します。

A 回答 (3件)

蛇足ですが、マニュアルにもあるように


環境によっては接続タイムアウトが利用できませんのでご注意を。
    • good
    • 0

fsockopen() を使うとTCPコネクション確立までの時間上限を設定できます。


TCPコネクション確立後に、相手側からなかなかデータが送られてこないことも考えられます。その場合には、stream_set_timeout() でタイムアウトできます。

file() よりも手間が掛かりますが、私は上記の方法でタイムアウト処理を実装していました。
    • good
    • 0
この回答へのお礼

こんな感じであっているのでしょうか?

$fsock_url = parse_url($url);
$fp = @fsockopen($fsock_url['host'],80,$errno,$errmsg,10);

if(fp){
stream_set_timeout($fp, 10);
#実行処理
}

もう少し調べてみます。
ご回答ありがとうございました。

お礼日時:2007/03/22 00:08

<?php


$url = 'www.yahoo.co.jp/';
if (file_exists( $url )) {
$fcontents = @join('', file("$url"));
}
?>
存在確認をしてから処理をかければいいと思いますよ。

参考URL:http://jp2.php.net/manual/ja/function.file-exist …
    • good
    • 0
この回答へのお礼

$url = "http://search.yahoo.co.jp/";
if (file_exists($url)){
print "ok";
}
else {
print "no";
}

試しに上記で試したのですが、「no」と出力されました。
なぜでしょう?(笑)

ご回答ありがうございました。

お礼日時:2007/03/22 00:03

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