【PHP8.x】stream_socket_server関数の使い方

作成日: 更新日:

stream_socket_server関数は、ネットワーク上でクライアントからの接続を受け入れるためのサーバーソケットを作成し、接続待機状態にする関数です。この関数を使用することで、PHPスクリプトをネットワークサーバーとして機能させ、他のプログラムやクライアントからの通信を待ち受けることが可能になります。

具体的には、local_socketという引数で、どのプロトコル(例えば、tcp://udp://)を使って、どのIPアドレスとポート番号(例えば、127.0.0.1:8000)で接続を待つのかを指定します。これにより、TCP/IPプロトコルだけでなく、UDPプロトコルやUnixドメインソケットなど、様々な種類のサーバーソケットを作成することができます。

関数が正常に実行された場合、クライアントからの接続を待ち受けるための『ストリームリソース』が返されます。このストリームリソースは、実際にクライアントが接続を試みてきた際に、その接続を受け入れるための別の関数(例えば stream_socket_accept)に渡して使用します。これにより、クライアントとの具体的な通信経路を確立することができます。

もしソケットの作成に失敗した場合は、この関数はfalseを返します。その際、errnoerrstrという引数を使用することで、なぜ失敗したのかというエラーコードとエラーメッセージの詳細な情報を取得し、適切なエラー処理を行うことができます。

この関数は、ウェブサーバーのような常に特定のポートで接続を待ち受け、データを受け取ったり応答を返したりするような、ネットワークを利用したアプリケーションをPHPで開発する際の基盤として非常に重要な役割を担っています。

基本的な使い方

構文(syntax)

stream_socket_server(
    string $address,
    ?int &$error_code = null,
    ?string &$error_message = null,
    int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,
    ?resource $context = null
): resource|false

引数(parameters)

string $address, ?int &$error_code = null, ?string &$error_message = null, int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, ?resource $context = null

  • string $address: サーバーがバインドするアドレスとポートを指定する文字列。例: "tcp://127.0.0.1:8000" や "udp://:9000"
  • ?int &$error_code = null: エラーが発生した場合にエラーコードが格納される整数型の変数への参照。
  • ?string &$error_message = null: エラーが発生した場合にエラーメッセージが格納される文字列型の変数への参照。
  • int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN: サーバーの動作を制御するフラグ。デフォルトはバインドとリスニング。
  • ?resource $context = null: ストリームコンテキストを指定するリソース。

戻り値(return)

resource|false

成功した場合、ソケットリソースを返します。失敗した場合は false を返します。

【PHP8.x】stream_socket_server関数の使い方 | いっしー@Webエンジニア