PHP stream_select() 函数接受具有由tv_sec和tv_usec指定的超时的流数组,并等待它们更改状态。
语法
stream_select(read, write, except, tv_sec, tv_usec)
参数
read | 必填。 将监视读取数组中列出的流,以查看字符是否可供读取(更准确地说,查看读取是否不会阻塞 - 特别是,流资源在文件末尾也已准备好) ,在这种情况下 fread() 将返回零长度字符串。 |
write | 必填。 将监视 write 数组中列出的流,以查看写入是否不会阻塞。 |
except |
|
tv_sec |
|
tv_usec | 可选。 请参阅tv_sec说明。 |
注意 :使用超时值 0 允许立即轮询流的状态,但是,不建议在循环中使用超时值 0,因为它会导致脚本消耗过多的 CPU 时间。
最好指定几秒的超时值,尽管如果需要同时检查和运行其他代码,使用至少 200000 微秒的超时值将有助于减少脚本的 CPU 使用率。
请注意,超时值是经过的最长时间。一旦请求的流可供使用,stream_select()函数就会返回。返回值
成功时,此函数返回修改后的数组中包含的流资源的数量,如果在任何有趣的事情发生之前超时到期,则该数量可能为零。出错时返回 false 并引发警告(如果系统调用被传入信号中断,则可能会发生这种情况)。
示例:stream_select() 示例
下面的示例检查查看数据是否已到达以供在 $stream1 或 $stream2 上读取。由于超时值为 0,它将立即返回。
<?php
//准备读取数组
$read = array($stream1, $stream2);
$write = NULL;
$except = NULL;
if (false === ($num_changed_streams =
stream_select($read, $write, $except, 0))) {
//错误处理代码
} elseif ($num_changed_streams > 0) {
//至少在其中一个流上
//发生了一些有趣的事情
}
?>
注意:由于当前 Zend 引擎的限制,它无法将像 null 这样的常量修饰符直接作为参数传递给希望通过引用传递此参数的函数。而是使用临时变量或最左侧成员为临时变量的表达式:
<?php
$e = NULL;
stream_select($r, $w, $e, 0);
?>
注意:在检查错误时使用===运算符。由于stream_select()可能返回0,因此与==的比较结果将为true。