我正在尝试通过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(),但我得到了同样的行为。
关于如何解决它的任何建议?
答案 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分钟后输出行尾字符。您是否尝试检查空字符串并将其循环回来?