PHP不应该等待第一个命令;在sleep()之前,这是如何完成的?

问题描述 投票:-1回答:2

首先,我需要做一些工作并写上“回声结果”,然后,等待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 sleep
2个回答
0
投票

如果PHP通过网络服务器运行,您所要求的是不可能的。 PHP不控制Web服务器如何缓冲数据。 flush()仅影响PHP缓冲区-网络服务器是否决定是否通过HTTP发送内容。

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

OTI,CLI SAPI将在flush()之后立即发送内容


0
投票

感谢您回答评论中的问题。据我了解,您是在Web服务器后面运行脚本。

我想指出这是可能的。这里的魔术键是HTTP标头Transfer-Encoding: chunked。当Apache不知道Content-Length时,它将开始以块的形式将响应流式传输到浏览器。考虑到这一点,应该可以配置Apache和PHP以支持它。

这里是一个参考问题,值得阅读以理解该主题:How to make PHP generate Chunked response

[另一种解决方案可能是查看类似https://reactphp.org的内容。我过去使用过它,为它做出了贡献,并且知道它也可以解决您的任务,但是会导致基础结构的变化。

希望这对您有所帮助。如果您对此主题还有其他疑问,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.