所以我的页面上有这个输出..不明白为什么我会弹出它。不过我是 php 新手,所以也许这很容易修复
-我有一个 header.php 文件,其中包含所有重要信息,以及页面的横幅。每个页面都包含此 header.php。
-我让它检查会话值以确保用户被允许进入某个页面。如果用户不被允许在那里,我会将他们踢回登录页面
这就是错误出现的地方。这就是我所拥有的:
include_once ("header.php");
if ($_SESSION['uid']!='programmer')
{
header('Location: index.php');
echo 'you cannot be here';
exit;
}
它重定向到的索引也有标头。那么这些多个标头引用是否会给我带来这个错误?我看不出有其他方法可以做到这一点,这让我发疯!
一旦文本输出到浏览器,您就无法使用
header()
。由于您的 header.php
可能包含输出 HTML,因此无法使用 header()
。
您可以通过多种方式解决此问题:
header.php
设置 uid 会话和其他重要内容)。ob_start()
来缓冲输出。如果 header.php 文件“有横幅”,那么它可能正在向页面输出一些 HTML 内容。
输出内容后无法发出 HTTP 标头。
发送任何其他内容后无法发送任何标头。一个很可能的罪魁祸首是 header.php 中结束
?>
标记后的额外空格。在任何纯脚本 php 文件中完全省略结束标记通常是一个好习惯。
您的错误应该准确地告诉您哪一行(以及哪个文件)正在发送输出。
对于重定向函数,我遇到了类似的错误(似乎也是无中生有),该错误曾经如下:
function Redirect($url) {
flush(); // Flush the buffer
header("Location: $url"); // Rewrite the header
die;
}
显然,您还需要添加
ob_flush();
来完全清除旧标头。新功能是:
function Redirect($url) {
flush(); // Flush the buffer
ob_flush();
header("Location: $url"); // Rewrite the header
die;
}
希望这可以帮助遇到此问题的其他人!
好吧,所以它已经修复了......不过不知道如何,也许有人可以解释为什么这会突然起作用。
这是我的代码:
include_once ("header.php");
if ($_SESSION['uid']!='programmer') {
if(isset($_SESSION['uid'])) {
echo $_SESSION['uid'];
}
header('Location: index.php');
exit;
}
让我再说一遍,现在一切正常了! PHP...你为什么现在工作?