PHP 的输出为啥是程序执行完成后再一起输出??

2019-11-24 11:15:20 +08:00
 lysS

前端了解下后端,学了些 php,如下代码:

<?php
echo "钱钱钱钱";
sleep(10);
echo '啊啊啊啊啊';
?>


它不是先输出钱,而是延迟 10 秒后,钱和啊一起输出。

py 它就是先输出钱,延时后再输出啊

所以各位巨大有什么解决办法吗

3048 次点击
所在节点    问与答
20 条回复
hahasong
2019-11-24 11:23:43 +08:00
前端你不了解 http 吗,想实现你的要求得在命令行下执行
815979670
2019-11-24 11:24:53 +08:00
cli 模式不是这样的
also24
2019-11-24 11:28:08 +08:00
缓冲区的原因,强制 flush 可解
optional
2019-11-24 11:35:05 +08:00
可以 flush 的
dobelee
2019-11-24 12:23:51 +08:00
请先学习一下 http。。。
nvkou
2019-11-24 12:28:03 +08:00
楼上说明了。php-cli 也是有的,之前试过用来做 ws 服务器
otakustay
2019-11-24 14:02:13 +08:00
不是,这和 HTTP 啥关系,HTTP 哪里规定了要一起输出的,楼上几位让楼主学 HTTP 的是几个意思,学歪吗?
worldtongfb
2019-11-24 14:30:22 +08:00
http 还能一次请求,给俩响应?你请求一次,还能先返回'钱钱钱钱',然后等 10 秒,再返回'啊啊啊啊啊'?
Trim21
2019-11-24 14:36:59 +08:00
这跟 http 有啥关系,http 里面一个请求也可以先返回一部分,再等十秒再返回另一部分啊,不关闭链接 body 分两次写不就行了吗。

php 能不能做到是另一回事,可 http 又不管你服务器是边渲染边返回还是渲染完了才开始响应。
lysS
2019-11-24 15:28:20 +08:00
lysS
2019-11-24 15:29:45 +08:00
这跟 HTTP 好像确实没关系,因为是这跟 HTTP 好像确实没关系,因为是一次请求
dorentus
2019-11-24 17:34:05 +08:00
@worldtongfb 当然可以的
CEBBCAT
2019-11-24 19:06:29 +08:00
设置响应头为流模式应该可解
python
2019-11-24 19:22:23 +08:00
想一下下载文件,就知跟 HTTP 没关系。
justrand
2019-11-24 19:42:38 +08:00
@lysS
我试了下就是线输出钱再过 10 秒输出啊。。。
环境:php 7.3.11
服务器:php 内置服务器
没有出现楼主的情况啊。楼上一群人都是试过了吗?
justrand
2019-11-24 19:51:57 +08:00
5200
2019-11-25 11:57:33 +08:00
```
//header('X-Accel-Buffering: no');
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i<30; $i++){
echo "<br> Line to show.";
echo str_pad('',4096)."\n";
echo date('Y-m-d H:i:s')."\n";
ob_flush();
flush();
sleep(1);
}

echo "Done.";
ob_end_flush();
```

![image.png]( https://i.loli.net/2019/11/25/AaSfOzWlDMZgpwo.png)

如果是用 Apache,可以直接每秒输出一条记录 。
如果是 nginx 作为 web 服务器时,就需要加上
header('X-Accel-Buffering: no');
julyclyde
2019-11-25 15:44:52 +08:00
@otakustay 如果 http 选“非 chunked”模式,那就必须一次性输出
otakustay
2019-11-25 16:20:27 +08:00
@julyclyde 这是对的,但问题是 http 很容易选 chunked 模式啊……即使 PHP 不是 chunk,前面的 nginx 可能也给你 chunk 掉了
lysS
2019-12-03 17:40:06 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/622564

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX