为什么我收到警告:无法修改标题信息 - 已经发送的标题(输出从...开始)?

时间:2014-10-03 15:45:18

标签: php function search header

我重复使用搜索PHP脚本,但是我收到了这个错误:

  

警告:无法修改标头信息 - 已发送的标头   (输出从/ Volumes / Work / MAMP / PC开始   Flag / php_scripts / conection.php:2)in / Volumes / Work / MAMP / PC   第63行的标记/包含/ search.php

第2行conection.php:

$con = mysqli_connect("localhost", "root", "root", "cms");

第63行search.php:

header('Location: search-page.php?keywords=' . urlencode($keywords));

有什么问题?

另外我需要提一下,脚本不会再将我重定向到search-page.php了。

4 个答案:

答案 0 :(得分:3)

当你使用header()之前,它不应该是任何输出,甚至不是空格,你有两个解决方案:

脏一点

在标题前使用ob_clean()来清理输出缓冲区

ob_clean();
header('Location: search-page.php?keywords=' . urlencode($keywords));

纠正一个

在您的脚本和请求路线中搜索任何输出,<?php之前的内容,echo es,HTML代码,print?>之后的空格原因;)

调试

此代码段可以帮助您找出代码中输出的位置:

var_dump(ob_get_contents());die()

把它放在第63行之前

Javascript解决方法

如果一切都失败了,你还有另外一个选择,使用javascript重定向,虽然我建议你继续尝试,但不要到达这一点:)

header(...)替换为:

echo '<script>window.location.href="search-page.php?keywords=' . urlencode($keywords)) . '";</script>';

答案 1 :(得分:1)

您已经发送了一个标题作为错误状态。请调查when and how headers are sent

通常在该行之前打印输出缓冲区时会发生这种情况。

确保您使用的是UTF-8 without BOM文档编码 - 在大多数文本编辑器中,BOM符号是不可见的,但可以解释为强制发送HTTP标头的内容。

您可以使用Output Control function

调试输出

答案 2 :(得分:0)

这是因为输出已经发送了。当你回应任何东西时,你不能编辑标题信息!

答案 3 :(得分:0)

您似乎得到的错误是因为输出已经发生。您可以使用此代码修复它:

if (headers_sent()) {
    ob_clean();
}  

刚刚找到this detailed answer

相关问题