Php 为什么服务器在页面加载后神秘地发送标题?

Php 为什么服务器在页面加载后神秘地发送标题?,php,http-headers,Php,Http Headers,由于某些奇怪的原因,当条件为true时,以下代码可以正常工作。我想知道为什么,与此相反,它是有效的 其中,$url是一个局部函数作用域变量 标题已经发送,HTML已经通过PHP动态地发送,并且通过HTML静态地打印到页面上。但是,根据条件,如果条件返回true,则仍会重定向用户。这是一个问题的原因是当我试图在一个新文件中复制它时,我得到了我预期的错误 警告:无法修改标题信息-标题已由发送(输出开始于 此外,我在没有条件的情况下得到了预期的错误,只需调用redirect\u user() incl

由于某些奇怪的原因,当条件为true时,以下代码可以正常工作。我想知道为什么,与此相反,它是有效的

其中,$url是一个局部函数作用域变量

标题已经发送,HTML已经通过PHP动态地发送,并且通过HTML静态地打印到页面上。但是,根据条件,如果条件返回true,则仍会重定向用户。这是一个问题的原因是当我试图在一个新文件中复制它时,我得到了我预期的错误

警告:无法修改标题信息-标题已由发送(输出开始于

此外,我在没有条件的情况下得到了预期的错误,只需调用
redirect\u user()

includes
目录位于存储库的上。live站点上的页面为

编辑

我发现输出缓冲已打开,我已将其关闭,但没有任何效果。设置为0后,无论是否发送标头,所有内容都会重定向。

注意:我自己没有找到此答案。帮助了我,但当时问题已解决

所有这一切的原因是,在live站点上,当本地主机上关闭时,
output\u buffering
被打开。或者,在live站点上,当本地主机上打开时,
display\u errors
被关闭。这导致了不一致的结果

输出缓冲意味着即使已经发送了头,它也会重定向。我使用
.htaccess
为live site和
localhost
设置
Output\u buffering
。此外,我使用ob\u start,因为这样对我来说效果更好


你是说有时调用
header()
会抛出警告,有时不会?你关心的是没有抛出警告的情况,对吗?>>此外,我在没有条件的情况下得到这个错误,只需调用redirect\u user()。那么,当它进入if语句时,就会抛出错误?如果是,这正是应该发生的情况。您已经用
echo
输出了内容,所以对
头(…)的任何调用
将抛出该警告。@Waterlomatt在我编写的第一个脚本中,没有抛出该警告。在我尝试复制该脚本时编写的第二个脚本中,它抛出了该警告。@Waterlomatt我知道它为什么会抛出错误,当它确实出现时……当它没有出现时,我感到困惑。我怀疑它没有进入您的if语句中,因为它不是起诉标题。你的if语句逻辑似乎自相矛盾。如果
会话['id']==get['id']
会话['id']&&get['id'],你怎么能得到它呢?希望这是清楚的。
include('includes/header.html');
echo "<div class = 'col-sm-6'>";
if (!ISADMIN && !(isset($_SESSION['id']) && isset($_GET['id']) && $_SESSION['id'] == $_GET['id'])) {
  @require('includes/login_functions.inc.php');     
  redirect_user(''); // Redirects successfully
}
header("Location: $url")