PHP fgets()(或fread())不会阻塞

时间:2009-08-10 15:20:06

标签: php fread fgets

我正在尝试通过PHP脚本连接到beanstalkd服务器并从现有队列中保留作业。 我正在使用fgets()函数从deamon获取响应,期望脚本挂起除非作业可用,这里是一个示例代码:

set_time_limit(0);
$connection = fsockopen('localhost', 11300);
fwrite($connection, "reserve\r\n");
stream_set_blocking($connection, TRUE);
fgets($connection);

正如您所看到的,我正在尝试强制fgets()函数阻塞,并且我将max_execution_time设置为0(表示没有限制),但过了一会儿(2分钟),脚本会返回而没有错误。 我试图通过telnet运行reserve命令,它会像exepcted一样挂起。 我也尝试使用fread(),但我得到了同样的行为。

关于如何解决它的任何建议?

3 个答案:

答案 0 :(得分:1)

也可以尝试使用stream_set_timeout()

答案 1 :(得分:0)

你在php.ini中设置了值吗?您是否通过phpinfo()确认了其正确的值?如果你以编程方式设置它,那么它将无法工作,参见http://us.php.net/manual/en/function.set-time-limit.php

  

当PHP以安全模式运行时,此功能无效。除了关闭安全模式或更改php.ini中的时间限制外,没有其他解决方法。

答案 2 :(得分:0)

守护进程可能会在2分钟后输出行尾字符。您是否尝试检查空字符串并将其循环回来?

相关问题