仅当使用header()函数打开页面时,才会出现“已发送标头”错误

时间:2017-01-03 14:25:25

标签: php http-headers

所以我一直在跟踪这个“已发送的标题”错误一周了。

我已经检查了

  • 我的文件顶部或底部都没有空格
  • 我没有UTF_8 BOM问题
  • 在调用header()
  • 之前没有打印或回声或其他输出

当我尝试直接从“登录”页面转到主页时发生错误:

  • 输入用户名和密码
  • 点击“登录”按钮
  • 此代码执行:

    $redirect_to = "Location:" . BASE_URL . "src/home.php";
    exit(header($redirect_to));
    

我收到了这个错误:

  

警告:无法修改标题信息 - 已在/home/brekra50/groupxsolutions.com/index.php上发送的输出(/home/brekra50/groupxsolutions.com/inc/header_start.html:10上的输出) 103

但....

如果我返回登录页面并单击页脚中的“联系我们”按钮,则联系页面会打开。如果我然后单击联系页面上的“主页”按钮,主页(刚刚发出警告)现在打开没有问题!

在这种情况下,我将使用此代码点击按钮打开主页;

<li ><a href=<?php echo BASE_URL ."src/home.php"; ?> class=<?php echo set_nav_classes(HOME_PAGE, $curr_page); ?> >Home</a></li>

这显然是我的问题的一些线索,但我无法弄清楚。 header()函数本身是否发送标题,以便当主页从该函数打开时,警告会被触发?如果是这样,我该如何解决这个问题?

以下是header_start.html第10行的代码:

<link rel="stylesheet" href= <?php echo BASE_URL . "css/fix.css"; ?> type="text/css" media="screen"> 

以下是index.php文件中第102和103行的代码:

$redirect_to = "Location:" . BASE_URL . "src/home.php";
exit(header($redirect_to));

“JustOn ......”我认为已经指出了正确的方向。我在index.php页面的最顶部有两个“require_once()”调用,它必须在调用header()之前发生。我认为这是输出问题。

现在......该怎么做。

1 个答案:

答案 0 :(得分:0)

现在我明白了&#34; include()&#34;和&#34;要求()&#34;函数也是输出并导致我的错误,我无法摆脱它们,因为它们是整个网站设计的关键。

所以在php文档中我发现了一个代码片段,它允许我用javascript打开我的页面,这避免了整个&#34;标题开始&#34;问题。

&#13;
&#13;
if (!headers_sent()) {
	$redirect_to = "Location:" . BASE_URL . "src/home.php";
	exit(header($redirect_to));
} else {
	$filename = BASE_URL . "src/home.php";
	echo '<script type="text/javascript">';
	echo 'window.location.href="' . $filename . '";';
	echo '</script>';

	echo '<noscript>';
	echo '<meta http-equiv="refresh" content="0;url=' . $filename . '" />';
	echo '<noscript>';

	exit;
}
&#13;
&#13;
&#13;