PHP5.2.6を使用して、以下のようなプログラムを作成。


$host = "実際に存在するホスト";
$port = 80;
$path = "実際に存在するパス";
$timeout = 1;
$fp = fsockopen($host, $port, $errno, $errstr, $timeout);
if (!$fp) {
error_log("errno = ".$errno);
error_log("errstr = ".$errstr);
return '';
}

このときに、たまに、
errno = 110
errstr = Connection timed out

という、エラーが返ってきてしまいます。

これの原因をはなぜ起きるかわかますでしょうか?
自分としては、fsockopenしている先が、1秒以内に
ソケット通信が出来ずに、$fpの戻りが空になったので
エラーが発生していると思うのですが・・
あってますかね?

これを改善するには、接続先のサーバ側の処理を早めるのか
他の通信方法でデータを取得するしか、方法は無いでしょうか?

例えば、file_get_contentsとか・・
わかる方が、いましたら、お力を貸して下さい。
よろしくお願いします。

あ、ちなみに、fsockopenの前に@を付与する
とかいう改善は、改善じゃないので、回答はいりません。


回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2010/02/11 17:55:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:km1967 No.1

回答回数541ベストアンサー獲得回数40

ポイント35pt

合っています。

対策としては、$timeoutの値を増やすこと。

id:hopefully

やっぱり、そうですか・・

一個だけ気になっているのですが、タイムアウトする場合は、接続先の

サーバには、アクセスログとか残らないのでしょうか?

2010/02/04 18:05:53
id:km1967 No.2

回答回数541ベストアンサー獲得回数40

ポイント35pt

>タイムアウトする場合は、接続先の

>サーバには、アクセスログとか残らないのでしょうか?

相手のサーバまで届いていればエラーログが残るかもしれませんが、プロキシやロードバランサがタイムアウトを出している場合もあるので何とも言えません。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません