PHP脚本处理:在某处输出缓冲?

时间:2013-01-05 21:02:01

标签: php apache webserver

有人可以向我解释PHP是如何运作的吗? 假设我们有这样的代码:

<?php
echo "line1 <br />";
echo "line2 <br />";
setcookie("TestCookie", "test");
echo "line3 <br />";
echo "line4 <br />";

当脚本逐行处理脚本时,是否将脚本发送到客户端(浏览器) 浏览器首先接收“line1”,呈现它,然后“line2”,呈现它等等?或者所有脚本的输出都在某处缓冲并在处理完脚本后立即发送所有内容?

2 个答案:

答案 0 :(得分:1)

这里(其他人)和互联网上都很好地解释了echo。我在使用cookies方面遇到了麻烦,所以我会解释一下:

Cookie是标题(您可以查找)。标题可以发送给用户(内容长度,cookie数据等)。用户还会发回标题(IP,post params,cookies)。标题出现在正文之前,这就是在任何输出之前必须调用setcookie的原因。

所以你设置了cookie。用户在加载页眉时会收到cookie。当他们请求另一个页面时,他们会发回cookie数据,这就是您只能在后续请求中检查$_COOKIE[whatever]的原因$_COOKIE访问当前请求的标头和Cookie。当您执行setcookie时,您只向用户发送下一个请求的Cookie,但它们不会出现在当前请求中。

答案 1 :(得分:1)

当PHP按顺序执行每一行时,输出通常是缓冲的。

PHP echo statement或者直接将输出发送到Web服务器后端或“用户空间”output buffer。输出缓冲区的大小可以不同,可以堆叠在其他输出缓冲区之上,并用于实现gzip compression等过滤器。

出于性能原因,存在两种输出缓冲区,除非有很好的理由(例如,您需要执行实时输出),因此不应禁用它们。