getservbyname

関数の概要

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関数は、ネットワーク通信でサービス名から対応ポート番号を調べる際に役立ちます。コードの可読性やメンテナンス性を高め、ハードコーディングされたポート番号を避けることができるため、実務でも使いやすい関数です。プロトコルによる違いやエラー処理も考慮しながら利用しましょう。