在 Windows 上,此函数不适用于使用 proc_open 打开的管道 (https://bugs.php.net/bug.php?id=47918, https://bugs.php.net/bug.php?id=34972, https://bugs.php.net/bug.php?id=51800)
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
stream_set_blocking — 设置流的阻塞/非阻塞模式
设置 stream
的阻塞或非阻塞模式。
此函数适用于任何支持非阻塞模式的流(目前,普通文件和套接字流)。
注意:
在 Windows 上,这对本地文件没有影响。Windows 上不支持本地文件的非阻塞 IO。
在 Windows 上,此函数不适用于使用 proc_open 打开的管道 (https://bugs.php.net/bug.php?id=47918, https://bugs.php.net/bug.php?id=34972, https://bugs.php.net/bug.php?id=51800)
当您对非阻塞流使用 fwrite() 时,数据不会像 t dot starling 所说那样被静默丢弃。
请记住,fwrite() 返回一个整数,这个整数表示实际写入流的数据量。因此,如果您看到 fwrite() 返回的值小于写入数据的量,这意味着您需要在将来再次调用 fwrite() 来写入剩余的数据量。
您可以使用 stream_select() 等待流可用于写入,然后继续将数据写入流。
非阻塞流很有用,因为您可以拥有多个非阻塞流,并等待它们可用于写入。
需要注意的是,stream_set_blocking() 和 stream_set_timeout() 不适用于标准 I/O 流,例如 STDIN 和 STDOUT。