関数の概要
PHPのgetservbyname関数は、指定したサービス名に対応するポート番号を取得するための関数です。ネットワークプログラミングやソケット通信を行う際に、サービス名から実際に使用されるポート番号を動的に取得したい場合に便利です。
パラメータの説明
string $service: 取得したいサービス名(例: “http”, “ftp”)。string $protocol: 使用するプロトコル名(例: “tcp”, “udp”)。
戻り値
成功した場合はサービス名に対するポート番号(整数)を返します。サービス名やプロトコルが見つからない場合は false を返します。
使用例
基本的な使い方
<?php
$port = getservbyname("http", "tcp");
echo "HTTPのポート番号は: " . $port; // 出力: HTTPのポート番号は: 80
?>
この例では、HTTPサービス(TCPプロトコル)の標準ポート番号「80」を取得しています。
異なるプロトコルのサービス番号を取得
<?php
$tcpPort = getservbyname("domain", "tcp");
$udpPort = getservbyname("domain", "udp");
echo "TCPドメインサービスのポート: " . $tcpPort . "n";
echo "UDPドメインサービスのポート: " . $udpPort . "n";
?>
TCPとUDPで同じサービス名が異なるポート番号を持っている場合があります。両方のポート番号を確認できます。
存在しないサービス名を指定した場合の処理
<?php
$port = getservbyname("unknownservice", "tcp");
if ($port === false) {
echo "指定したサービスは存在しません。";
} else {
echo "ポート番号: " . $port;
}
?>
サービス名が正しく登録されていない場合は false が返り、その場合にエラー処理や代替処理を行うことが推奨されます。
関連する関数
- getservbyport — ポート番号からサービス名を取得する
- getprotobyname — プロトコル名からプロトコル番号を取得する
- fsockopen — ソケット接続を開く
まとめ
getservbyname関数は、ネットワーク通信でサービス名から対応ポート番号を調べる際に役立ちます。コードの可読性やメンテナンス性を高め、ハードコーディングされたポート番号を避けることができるため、実務でも使いやすい関数です。プロトコルによる違いやエラー処理も考慮しながら利用しましょう。
