我是开发新手,我正在尝试学习php。
为什么当我使用下面的代码时,重定向(通过标头语法)仍然在发生,即使内容已经在它之前输出了?
<script>
(yourcode here)
debugger;
(next code to debug)
</script>
非常感谢提前
答案 0 :(得分:0)
HTTP要求响应标头严格到达正文内容之前,如下所示:
HTTP/1.1 200 OK
Powered-By: PHP/7.0.0-20150527
Content-Type: text/html; charset=utf-8
<html><body>Hello world!</body></html>
为了使PHP符合该要求, PHP必须在准备发送任何正文内容的时刻发送所有累积标题。您的问题的答案取决于PHP何时准备好发送&#34;。
要解决这个问题,请查看您的output_buffering
设置:
var_dump(ini_get('output_buffering'));
在我的机器上使用默认设置,返回4096
,according to the manual表示PHP将准备发送&#34;当累积了4096个字节时。
要使页面按预期运行(即不发送标头),您需要输出足够的字节以超过output_buffering
的设置。您可以通过减少输出缓冲设置或发出更多正文来实现,例如:
echo str_repeat('<div/>', 4096);
另见SO primer。