标题已经发送php

时间:2015-08-04 18:21:56

标签: php http-headers

我在这里有一些奇怪的问题。是的我完全知道并理解该错误消息(无法修改标题信息 - 标题已经发送)意味着,但我仍然在努力解决这个问题的某些部分......

说明: 我有一个中心index.php,它包含基本的html模板。在内容区域中的这个html模板的中间,我有类似的东西:

<?php
if(isset($_GET["site"]) && $PAGE->isValidPage($_GET["site"])) {
include($_GET["site"] . ".php");
}

所以基本上我只有主html模板,并根据请求的页面将子模板中的所有子php逻辑插入到主模板中。

基本的“待导入”页面如下所示:

if(isset($_POST["somevar"])) {
if($CLASS->validate($_POST["somevar"])) {
$CLASS->execute($_POST["somevar"]);
header("Location: " . $root);
}
else {
// Show normal template from here like:
?>

<div>
<input type="text" name="somevar" />
</div>

<?php
}

因此,一般来说,我的子模板会查看是否有要处理的数据($ _POST [“somevar”])并将验证然后执行此数据。如果thers不是任何数据,它将只显示一个表单,以便用户可以输入数据。典型目的:“用户更改密码”。

现在有趣的部分:在验证并执行某些内容后,它将使用header()重定向。这适用于项目的每个站点,并在execute()之后正确地重定向到$ root,但在某些特定站点中将无法执行此操作:我的自定义编程论坛。例如,当我的子模板是addthread.php,用户可以在其中启动一个新线程时,即使该模板看起来与其他工作模式(changepwd.php)完全相同,也不会这样做。

  1. 为什么这种东西甚至可以工作?在工作子模板中使用execute()时,子模板仍然嵌入在主index.php中,这意味着已经从index.php中的主html模板打印了html代码。在这些情况下,header()重定向仍然有效。

  2. 为什么它在我的addthread.php中不起作用?我怎么能真正解决这个问题?

  3. 如果需要实际代码,请告诉我:) 谢谢!

1 个答案:

答案 0 :(得分:1)

header("Location: " . $root);

如果已向浏览器/用户回显任何内容,则无法运行。包括顶部的任何额外线条。