- 締切済み
コマンドの実行時間の調節
はじめして。 最大実行時間超過のエラーで困っています。 web上からファイルを取得する場合に、 $fcontents = @join('', file("$url")); などとしていますが、 $urlのサーバーが落ちていたりすると、 最大スクリプト実行時間のエラーとなり、 繰り返し処理で連続してファイルを取得する場合に、 スクリプト全体が止まってしまって困っています。 処理の前に、一時的に set_time_limit(300); などとしても、結局その時間内にサーバーからの応答がないと エラーとなってしまいます。 ある一定時間、サーバーからの応答がない場合、 その$urlの処理だけを飛ばすような方法がありましたらご教授ください。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- tany180sx
- ベストアンサー率63% (239/379)
蛇足ですが、マニュアルにもあるように 環境によっては接続タイムアウトが利用できませんのでご注意を。
- racchoman
- ベストアンサー率71% (20/28)
fsockopen() を使うとTCPコネクション確立までの時間上限を設定できます。 TCPコネクション確立後に、相手側からなかなかデータが送られてこないことも考えられます。その場合には、stream_set_timeout() でタイムアウトできます。 file() よりも手間が掛かりますが、私は上記の方法でタイムアウト処理を実装していました。
- calltella
- ベストアンサー率49% (317/635)
<?php $url = 'www.yahoo.co.jp/'; if (file_exists( $url )) { $fcontents = @join('', file("$url")); } ?> 存在確認をしてから処理をかければいいと思いますよ。
お礼
$url = "http://search.yahoo.co.jp/"; if (file_exists($url)){ print "ok"; } else { print "no"; } 試しに上記で試したのですが、「no」と出力されました。 なぜでしょう?(笑) ご回答ありがうございました。
お礼
こんな感じであっているのでしょうか? $fsock_url = parse_url($url); $fp = @fsockopen($fsock_url['host'],80,$errno,$errmsg,10); if(fp){ stream_set_timeout($fp, 10); #実行処理 } もう少し調べてみます。 ご回答ありがとうございました。