• 締切済み

コマンドの実行時間の調節

はじめして。 最大実行時間超過のエラーで困っています。 web上からファイルを取得する場合に、 $fcontents = @join('', file("$url")); などとしていますが、 $urlのサーバーが落ちていたりすると、 最大スクリプト実行時間のエラーとなり、 繰り返し処理で連続してファイルを取得する場合に、 スクリプト全体が止まってしまって困っています。 処理の前に、一時的に set_time_limit(300); などとしても、結局その時間内にサーバーからの応答がないと エラーとなってしまいます。 ある一定時間、サーバーからの応答がない場合、 その$urlの処理だけを飛ばすような方法がありましたらご教授ください。 宜しくお願い致します。

みんなの回答

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

蛇足ですが、マニュアルにもあるように 環境によっては接続タイムアウトが利用できませんのでご注意を。

  • racchoman
  • ベストアンサー率71% (20/28)
回答No.2

fsockopen() を使うとTCPコネクション確立までの時間上限を設定できます。 TCPコネクション確立後に、相手側からなかなかデータが送られてこないことも考えられます。その場合には、stream_set_timeout() でタイムアウトできます。 file() よりも手間が掛かりますが、私は上記の方法でタイムアウト処理を実装していました。

takahashi_yuki
質問者

お礼

こんな感じであっているのでしょうか? $fsock_url = parse_url($url); $fp = @fsockopen($fsock_url['host'],80,$errno,$errmsg,10); if(fp){ stream_set_timeout($fp, 10); #実行処理 } もう少し調べてみます。 ご回答ありがとうございました。

  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

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

参考URL:
http://jp2.php.net/manual/ja/function.file-exists.php
takahashi_yuki
質問者

お礼

$url = "http://search.yahoo.co.jp/"; if (file_exists($url)){ print "ok"; } else { print "no"; } 試しに上記で試したのですが、「no」と出力されました。 なぜでしょう?(笑) ご回答ありがうございました。

関連するQ&A