首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么此标头位置在内容已回显后重定向工作?

为什么此标头位置在内容已回显后重定向工作?
EN

Stack Overflow用户
提问于 2011-10-29 04:08:17
回答 2查看 989关注 0票数 3
代码语言:javascript
复制
<?
echo "lalala";
header("Location: http://www.google.com/");

如果我把它放在一个普通的php文件中,并通过一个带有mod-php (PHP version5.3.2-1ubuntu4.10)的标准apache2服务器,重定向到google works。

代码语言:javascript
复制
<?
echo "lalala";
flush();
header("Location: http://www.google.com/");

这段代码显然不会产生一个有效的重定向。

我的问题是,第一个代码是如何处理的,为什么它会工作。因为我记得当时这样的事情是不可能的。mod-php或apache是否足够智能,能够缓冲整个请求并在内容之前安排头部?

和:

如果我确保不手动刷新输出,我可以依赖它吗?因为这会让我的申请变得更容易。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-29 04:10:05

默认情况下,输出缓冲可能已启用。如果您想要依赖此功能,则应手动启用它。

http://php.net/manual/en/function.ob-start.php

票数 7
EN

Stack Overflow用户

发布于 2011-10-29 04:12:08

header函数向http响应中添加一个HTTP公共标头。因此,重定向已设置,浏览器在向您显示输出之前会得到302消息。

flush命令php发送在它被调用时已经准备好的http响应。这就是为什么第二个代码不会设置头部(它必须在发送任何输出之前设置)。

而且,PHP不应该输出任何内容,直到:

  • 脚本将被处理(即使出现错误也会停止解析)
  • 您可以将其设置为使用

()将输出发送到脚本中的某个位置

最后,在输出控制http://www.php.net/manual/en/intro.outcontrol.php上进行检查

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7934351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档