【发布时间】:2019-10-21 23:58:54
【问题描述】:
由于某些奇怪的原因,以下代码在条件为真时可以正常工作。我想知道为什么,与the expected error 相反,它有效。
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
}
上面的函数redirect_user() 位于一个包含文件中,我在大部分PHP 文件的顶部调用该函数。主要是函数调用
header("Location: $url")
其中 $url 是一个局部函数作用域变量。
标头已经发送,HTML 已经通过 PHP 动态和通过 HTML 静态打印到页面。但是,根据条件,如果条件返回 true,用户仍会被重定向。这是一个问题的原因是当我尝试在一个新文件中重现它时,我得到了我期望的错误,
警告:无法修改标头信息 - 标头已发送(输出开始于
此外,我在没有条件的情况下按预期收到此错误,只需调用redirect_user()。
includes 目录位于存储库的GitHub 上。直播网站上的页面是http://www.bforborum.com/test
编辑
我发现 output_buffering 已打开,我将其关闭无济于事。将此设置为 0,无论是否发送标头,所有内容都会重定向。
【问题讨论】:
-
你是说有时调用
header()会抛出警告,有时却不会?您担心没有发出警告的情况,对吗? -
>> 此外,我在没有条件的情况下收到此错误,只需调用 redirect_user()。那么,当它进入您的 if 语句时,会引发错误吗?如果是这样,那正是应该发生的事情。您已经使用
echo输出了内容,因此任何对header(...)的调用都会引发该警告。 -
@waterloomatt 在我制作的第一个脚本中,没有抛出警告。在我尝试重现此内容时制作的第二个脚本中,它会引发警告。
-
@waterloomatt 我知道为什么它会抛出错误......当它不是时我很困惑
-
我怀疑它不会进入您的 if 语句,因此不会发出标题。您的 if 语句逻辑似乎自相矛盾。如果
!session['id'] && get['id'],session['id'] == get['id']怎么可能?希望这很清楚。
标签: php http-headers