Pingは、2つのホストとネットワーク応答速度間の接続性を検出するための広く使用されているネットワークツールです。従来、PingはICMPプロトコルパケットを使用して、ターゲットホストがオンラインであるかどうかを判断し、往復時間を測定していました。
PHP環境では、ICMPプロトコルパッケージを直接使用できないため、一般的に使用される方法は、ソケット接続を確立することによりPingの効果をシミュレートすることです。 PHPのfsocckopen()関数を使用して、ターゲットホストの指定されたポートに接続しようとするため、ホストに到達可能かどうかを判断できます。
function ping($host, $timeout = 1) {
$fsock = fsockopen($host, 80, $errno, $errstr, $timeout);
if (!$fsock) {
return false;
} else {
fclose($fsock);
return true;
}
}
関数パラメーター説明:
この関数は、ターゲットホストのポート80(デフォルトのHTTPポート)に接続しようとし、接続に失敗した場合にtrueを返します。
$host = "www.baidu.com";
if (ping($host)) {
echo "Ping $host 成功!";
} else {
echo "Ping $host 失敗!";
}
このコードを実行した後、Baiduサーバーに正常に接続できる場合は、「www.baidu.comを正常に!」出力されます。
FSOCCKOPEN()にはソケットサポートが必要なので、PHP環境でソケット拡張機能が有効になっていることを確認してください。 PHP.iniでは、対応する拡張機能がコメントアウトされていないことを確認してください。さらに、一部の仮想ホストまたはサーバーは、外部ネットワーク接続を制限する場合があり、これにより機能が適切に機能しません。
この記事では、PHPの組み込み関数fsockopen()を使用して、ターゲットホストポートのping検出を実現する方法を紹介します。この方法を習得すると、開発者はPHPプロジェクトでのネットワーク接続の検出を実現し、アプリケーションの堅牢性と安定性を改善できます。