首先,我需要做一些工作并写上“回声结果”,然后,等待10秒 然后做某事。
基本示例:
// Now
echo date('h:i:s') . "\n";
// wait for 2 sec.
sleep(2);
echo date('h:i:s') . "\n";
PHP等待大约2秒钟编写所有echo命令。但是它必须先写回显打印。然后,等待2秒钟。然后写下第二个日期。如何解决呢?我不正确吗?
如何实现?
如果PHP通过网络服务器运行,您所要求的是不可能的。 PHP不控制Web服务器如何缓冲数据。 flush()仅影响PHP缓冲区-网络服务器是否决定是否通过HTTP发送内容。
此外,即使网络服务器确实发送了内容,浏览器也会决定何时渲染内容。浏览器中渐进式渲染的逻辑相当复杂。
OTI,CLI SAPI将在flush()之后立即发送内容
感谢您回答评论中的问题。据我了解,您是在Web服务器后面运行脚本。
我想指出这是可能的。这里的魔术键是HTTP标头Transfer-Encoding: chunked
。当Apache不知道Content-Length
时,它将开始以块的形式将响应流式传输到浏览器。考虑到这一点,应该可以配置Apache和PHP以支持它。
这里是一个参考问题,值得阅读以理解该主题:How to make PHP generate Chunked response
[另一种解决方案可能是查看类似https://reactphp.org的内容。我过去使用过它,为它做出了贡献,并且知道它也可以解决您的任务,但是会导致基础结构的变化。
希望这对您有所帮助。如果您对此主题还有其他疑问,请告诉我。