fsockopenを使用してゲームサーバーと通信しようとしています。これはいくつかの基本的な統計情報で応答します。これは、サーバーがオンラインのときには完全に動作しますが、サーバーがオフラインの場合、次のコードはPHPがデータを読み取るページの表示を停止させます。PHP5のfsockopen接続エラーのブレークサイト(キャプチャ方法に関係なく)
try {
$socket = fsockopen($host, $port, $errno, $errstr, 10);
if ($socket !== false) {
fwrite($socket, "\xFE");
$data = "";
$data = fread($socket, 1024);
fclose($socket);
if ($data !== false && substr($data, 0, 1) == "\xFF") {
// get into
} else {
// Server did not send back proper data, or reading from socket failed.
print "Server not available.";
}
} else {
// ...
}
} catch(Exception $e){
// ...
}
私はtry/catchを試しましたが、私は例外にカスタムハンドラを追加しようとしました。私の唯一のアイデアは、Web要求の外部でこれを実行し、Web要求がそれを開始しないように応答を保存することです。
どのような考えですか?これは、10秒間のタイムアウトが動作されていることを確認することです
echo date("Y-m-d H:i:s")."Before open\n";
$socket = fsockopen($host, $port, $errno, $errstr, 10);
echo date("Y-m-d H:i:s")."After open (socket=".($socket===false?"Bad":"OK")."\n";
:
代わりにCURLを使用してください。それははるかに信頼性が高く、タイムアウトを設定することができます。 –
私はしばらくの間、多くのカールの仕事をする必要はありませんでした。ちょうどデータを取得するだけでなく、これをカールに変えるためにいくつかの仕事をしなければなりません。 – helion3
特に、スクリプトを殺すものは何ですか?そのコードに致命的なエラーがあってはいけません。 – goat