PHP不应该等待第一个命令;睡前(),这是怎么做到的



首先,我需要做一些工作并写"echo result",然后,等待10秒然后做某事

基本示例:

// Now
echo date('h:i:s') . "n";
// wait for 2 sec.
sleep(2);
echo date('h:i:s') . "n";

PHP在编写所有echo命令时等待大约2秒。但它必须写第一个回声打印;然后,等待2秒,然后写下第二个日期。如何解决这个问题?我错了吗?

如何做到这一点?

如果PHP是通过Web服务器运行的,那么您所要求的是不可能的。PHP不控制Web服务器缓冲数据的方式。flush((只影响PHP缓冲区——Web服务器是否通过HTTP发送内容是它的决定。

此外,即使Web服务器确实发送了内容,浏览器也会决定何时渲染。浏览器中渐进渲染的逻辑相当复杂。

OTOH CLI SAPI将在flush((之后立即发送内容

感谢您回答评论中的问题。据我所知,你在一个网络服务器后面运行你的scirpt。

我想指出这是可能的。这里的神奇之处在于HTTP头Transfer-Encoding: chunked。当Apache不知道Content-Length时,它将开始将响应分块流式传输到客户端/浏览器。考虑到这一点,应该可以配置Apache和PHP来支持这一点。

以下是一个值得阅读以理解主题的参考问题:如何使PHP生成Chunked响应

另一个解决方案可以是查看以下内容https://reactphp.org.我过去使用过它,为它做出了贡献,我知道它也会解决你的任务,但它会导致基础设施的改变。

希望这对你有帮助。如果你对这个话题还有其他问题,请告诉我。

相关内容

最新更新