PHP 标头位置在 HTML 中间工作
Posted
技术标签:
【中文标题】PHP 标头位置在 HTML 中间工作【英文标题】:PHP header Location works in the middle of HTML 【发布时间】:2011-03-03 12:08:43 【问题描述】:我无法理解 header("Location: http://www.google.com/");
如何在 html 页面的 <body>
中间工作。
由于 HTML 输出,在<?php ... ?>
部分开始之前已经发送了标头,因此不应该出现错误。
我指的是我期望得到的警告Cannot modify header information - headers already sent by...
。
我正在本地 PHP 开发环境 (Apache/2.2.15 (Win32) PHP/5.3.2) 上对此进行测试。
这是一个例子:
<html>
<head>
</head>
<body>
<?php header("Location: http://www.google.com/"); ?>
</body>
</html>
有什么想法吗?谢谢。
【问题讨论】:
有效吗?它会将您发送到 google.com 吗? 是的,因为启用了输出缓冲,请参阅下面的答案。 【参考方案1】:因为output buffering...
【讨论】:
【参考方案2】:如果您在 php.ini 中自动启用了输出缓冲,那么您可以在实际发送输出之前的任何时间发出标头。
【讨论】:
+1,这可能是问题所在 - php.net/manual/en/outcontrol.configuration.php 这是一件好事吗?我应该让它保持启用吗?能够在 HTML 正文中使用 PHP 脚本而不是在文档顶部 (IMO) 使用 PHP 脚本来进行转发实际上非常方便。这是推荐的吗?谢谢。 它将阻止诸如增量更新之类的事情。我自己更喜欢在脚本中手动打开它,而不是希望它已在我的脚本部署到的服务器的配置中启用。 好的,我想我也会在我的脚本中启用它。这会保证输出缓冲将真正起作用,还是某些服务器设置可能会阻止它正常工作?另外,请告诉我在我的脚本中手动打开它的最佳方法是什么。 如果您在脚本中明确启用它,则服务器配置无法禁用它。ob_start()
启用它,ob_end_flush()
用于将缓冲区发送给客户端。【参考方案3】:
如果您启用了输出缓冲(请参阅ob_start()),则在整个页面完成之前不会发送任何输出。
【讨论】:
【参考方案4】:我最近在 Windows 上使用 WAMP 包进行一些开发时注意到了这一点。当我转向在 Linux 机器上运行它时,引起了很多麻烦。我相信有一个配置值集导致它缓冲所有页面。
【讨论】:
以上是关于PHP 标头位置在 HTML 中间工作的主要内容,如果未能解决你的问题,请参考以下文章
IFRAME 中的 PHP“标头(位置)”,加载到 _top 位置?