0

etsy のオープン ソースstatsd ライブラリを使用して、PHP スクリプトのレポートを設定しています。私は彼らの与えられた例に基づいて接続していますが、fsockopen無視しているように見えtry/catchてエラーを出力しているという問題に遭遇しています。

statsd サーバーが稼働している場合はすべて正常に動作しますが、サーバーがダウンしているか、php スクリプトが接続できない場合は、次のようになります。

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: 
Name or service not known

@fsockopen の前に追加しようとしましたが、ダイスはありませんでした。また、エラーを返すのに約 20 秒かかるため、タイムアウト設定を完全に無視しているようです。

        try {
            $host = 'stats.thisserverisdown.com';
            $port = '8125';
            if ( $fp = @fsockopen("udp://$host", $port, $errno, $errstr, 1) ) {
                if (!(get_resource_type($fp) == 'stream')) { return false; }
                stream_set_timeout($fp,1);
                stream_set_blocking($fp,false);
                foreach ($sampledData as $stat => $value) {
                    @fwrite($fp, "$stat:$value");
                }
                @fclose($fp);
            }
            return true;
        } catch (Exception $e) {
            return false;
        }
4

1 に答える 1

1

fsockopenエラーをスローしていません。fsockopen指定したホスト名を解決する必要があるため、 を呼び出しますが、getaddinfo()失敗しています。

IP アドレスを指定するか、次の手順を実行してください。

fsockopen( @"udp://$host", ...
于 2012-08-03T17:13:17.527 に答える