首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows上的stream_set_blocking php

windows上的stream_set_blocking php
EN

Stack Overflow用户
提问于 2017-07-07 04:05:33
回答 1查看 239关注 0票数 4

为什么stream_set_blocking不在windows上工作..?

这里有一些使用stream_set_blocking的代码

代码语言:javascript
复制
php -r "stream_set_blocking(STDIN, FALSE);echo fread(STDIN, 10);"

在linux上,它立即退出。(正确的行为)

在窗口上,它将挂起以输入。(不正确的行为,它忽略了非阻塞设置。)

EN

回答 1

Stack Overflow用户

发布于 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上实现所需的行为:

代码语言:javascript
复制
// 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机器,不能测试这个

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44962384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档