ホームページ  >  記事  >  バックエンド開発  >  PHP でリモートサーバーポートに ping を実行するにはどうすればよいですか?

PHP でリモートサーバーポートに ping を実行するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-18 12:09:31598ブラウズ

How to Ping a Remote Server Port in PHP?

PHP を使用してサーバー ポートに ping を送信する

リモート サーバーの接続ステータスを取得することは、ネットワーク管理とテストの重要な側面です。 PHP は、fsockopen() 関数を使用して IP アドレスとポートを ping する簡単な手段を提供します。ただし、質問で言及されている既存のスクリプトは、特定の IP とポートの組み合わせではなく、Web サイトのテストに限定されています。

このニーズに対処するには、TCP 接続確立メカニズムを利用できます。指定された IP アドレスとポートを使用して TCP 接続の確立を試みることにより、サーバーの可用性を推測できます。以下のコードは、この機能をカプセル化しています。

<code class="php"><?php

function ping($host, $port, $timeout) 
{ 
  $tB = microtime(true); 
  $fP = fsockopen($host, $port, $errno, $errstr, $timeout); 
  if (!$fP) { return "down"; } 
  $tA = microtime(true); 
  return round((($tA - $tB) * 1000), 0)." ms"; 
}

// Usage example: ping a server at IP address 127.0.0.1, port 80
echo ping("127.0.0.1", 80, 10);

?></code>

このコード スニペットは、サーバーが指定されたポートで TCP 接続を受け入れているかどうかを判断します。指定されたタイムアウト内に接続が確立された場合、関数は ping 応答時間をミリ秒単位で返します。それ以外の場合は、サーバーに到達できないことを示す「down」を返します。

応答をさらに絞り込むには、受け入れられた回答で提供されている pingDomain() 関数を使用できます。

<code class="php"><?php

function pingDomain($domain){
    $starttime = microtime(true);
    $file      = fsockopen ($domain, 80, $errno, $errstr, 10);
    $stoptime  = microtime(true);
    $status    = 0;

    if (!$file) $status = -1;  // Site is down
    else {
        fclose($file);
        $status = ($stoptime - $starttime) * 1000;
        $status = floor($status);
    }
    return $status;
}

// Usage example: ping a server at domain name example.com
echo pingDomain("example.com");

?></code>

PHP のソケット機能を活用することで、IP アドレスとドメイン名の両方に効果的に ping を送信して、接続をテストし、応答しないホストを特定できます。

以上がPHP でリモートサーバーポートに ping を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。