stream_select
在给定的流数组上运行select()系统调用,并使用tv_sec和tv_usec指定的超时
PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8
stream_select 函数用于检测一组流的状态。它可以用来等待某些流变为可读、可写或出错,通常用于实现类似于非阻塞I/O的功能。它会阻塞程序,直到检测到指定的流可以进行进一步的操作。
int stream_select ( array &$read, array &$write, array &$except, float $tv_sec, float $tv_usec )
返回值为被改变状态的流的数量。如果发生错误,则返回 false。
下面是一个示例代码,展示了如何使用 stream_select 来等待某个流的状态变化:
<?php // 创建一个流资源 $stream = fopen('php://stdin', 'r'); $read = array($stream); $write = array(); $except = array(); <p>// 设置等待时间为 10 秒<br> $tv_sec = 10;<br> $tv_usec = 0;</p> <p>// 调用 stream_select 来检测流的状态<br> $num_changed_streams = stream_select($read, $write, $except, $tv_sec, $tv_usec);</p> <p>if ($num_changed_streams === false) {<br> echo "发生错误\n";<br> } elseif ($num_changed_streams > 0) {<br> echo "有数据可读\n";<br> $data = fgets($stream);<br> echo "读取的数据: " . $data;<br> } else {<br> echo "没有流状态变化\n";<br> }<br> ?><br>
在此示例中,首先创建了一个输入流 `$stream`,并将其加入 `$read` 数组中。然后调用 `stream_select` 来等待最多 10 秒钟,查看该流是否有数据可读。如果 `stream_select` 返回的值大于 0,则表示该流有数据可读取;如果返回值为 0,则表示在给定的时间内没有状态变化;若返回 false,则表示发生了错误。