array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'ja', ), 'this' => array ( 0 => 'function.stream-socket-recvfrom.php', 1 => 'stream_socket_recvfrom', ), 'up' => array ( 0 => 'ref.stream.php', 1 => 'ストリーム 関数', ), 'prev' => array ( 0 => 'function.stream-socket-pair.php', 1 => 'stream_socket_pair', ), 'next' => array ( 0 => 'function.stream-socket-sendto.php', 1 => 'stream_socket_sendto', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'ja', 'path' => 'reference/stream/functions/stream-socket-recvfrom.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 5, PHP 7, PHP 8)
stream_socket_recvfrom — 接続されているかどうかにかかわらず、ソケットからのデータを受信する
$socket
,$length
,$flags
= 0,&$address
= null
stream_socket_recvfrom() は、
リモートソケットから最大 length
バイトのデータを
受け取ります。
socket
リモートソケット。
length
socket
から受信するバイト数。
flags
flags
は以下の値の組み合わせです。
STREAM_OOB |
OOB (out-of-band ) データを処理します。
|
STREAM_PEEK |
ソケットからデータを取得しますが、バッファを消費しません。 fread() あるいは stream_socket_recvfrom() を続けてコールした 際には、同じデータが読み込まれます。 |
address
address
が指定された場合、
そこにはリモートソケットのアドレスが保存されます。
読み込んだデータを文字列で返します。
失敗した場合に false
を返します
例1 stream_socket_recvfrom() の例
<?php
/* localhost のポート 1234 へのサーバーソケットをオープンします */
$server = stream_socket_server('tcp://127.0.0.1:1234');
/* 接続を受け付けます */
$socket = stream_socket_accept($server);
/* OOB データのパケットを取得します(1500 は典型的な MTU のサイズです) */
echo "Received Out-Of-Band: '" . stream_socket_recvfrom($socket, 1500, STREAM_OOB) . "'\n";
/* 通常の帯域内のデータを読み込みますが、バッファを消費しません */
echo "Data: '" . stream_socket_recvfrom($socket, 1500, STREAM_PEEK) . "'\n";
/* 同じパケットをもう一度読み込みます。今度はバッファからそれを削除します */
echo "Data: '" . stream_socket_recvfrom($socket, 1500) . "'\n";
/* ソケットを閉じます */
fclose($socket);
fclose($server);
?>
注意:
受信したメッセージが
length
パラメータより 長かった場合、ソケットの型によっては(例えば UDP など)超過分の バイトデータが捨てられてしまう可能性があります。
注意:
バッファベースのストリーム関数 (fread() あるいは stream_get_line() など) をコールした後に ソケットベースのストリームで stream_socket_recvfrom() をコールすると、ストリームバッファを経由せず、データをソケットから 直接読み込みます。