为什么stream_set_blocking不在windows上工作..?
这里有一些使用stream_set_blocking的代码
php -r "stream_set_blocking(STDIN, FALSE);echo fread(STDIN, 10);"在linux上,它立即退出。(正确的行为)
在窗口上,它将挂起以输入。(不正确的行为,它忽略了非阻塞设置。)
发布于 2022-12-02 03:10:19
在Windows上,stream_set_blocking()的行为可能与您预期的不同。这是因为Windows使用一组不同的系统调用来处理非阻塞I/O,而不是Linux和其他类似Unix的操作系统。
要在Windows上实现与Linux上相同的行为,可以使用stream_set_timeout()函数设置阻塞I/O操作的超时。这将导致fread()在指定的时间后返回,即使没有可用的数据。
下面是一个示例,说明如何使用stream_set_timeout()在Windows上实现所需的行为:
// Set a timeout of 1 second for blocking I/O operations
stream_set_timeout(STDIN, 1);
// Read up to 10 bytes from standard input
$data = fread(STDIN, 10);
// Check if there was any data available
if ($data === false) {
// No data was available within the timeout period
// Handle the error as appropriate
} else {
// Data was available, do something with it
echo $data;
}注意,在等待数据可用时,此示例仍将阻塞长达1秒的时间。如果需要完全避免阻塞,可以使用stream_select()函数等待数据在流上可用而不阻塞。
有关PHP中的非阻塞I/O的更多信息,请参阅正式文档:
https://www.php.net/manual/en/intro.stream.php
注意:我没有windows机器,不能测试这个
https://stackoverflow.com/questions/44962384
复制相似问题