PHP错误:无法修改标题信息 - 头已经发出已
Possible Duplicate:
Headers already sent by PHPPHP错误:无法修改标题信息 - 头已经发出已
所以,我有我的网页上这个输出..不理解为什么我把它弹出。我是新来的,虽然PHP,所以也许它的东西很容易解决
-I有header.php文件,其中包括所有重要信息,以及具有页面的横幅。这个header.php包含在每个页面上。
-I有它检查会话值,以确保用户可以在某一个页面。如果不允许用户在那里,我踢他们回到登录页面
这是错误虽然出现。这是我的:
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()
来缓冲输出。
另外请注意,除非你'缓冲输出,在启动php标签之前甚至有一个空行(或空格)会遇到这个错误,因为为了确定是否可以发送标题,即使空白也算作输出。 – Dathan 2009-11-24 22:54:48
没问题,所以我在if语句之后添加了包含头,并且摆脱了错误,但是,现在,当我正确登录时,无论如何,我都会重定向到index.php ..为什么? 网址:http://nait.jtlnet.com/~fpkj5v0r/index.php 用户:程序员 密码:prog123 - 这是我现在的代码: – Marcus 2009-11-24 22:56:29
而且,感谢Dathan的领导,我读到了有关空白的错误,但看起来并不是这样。我希望这很容易! – Marcus 2009-11-24 22:57:52
如果header.php文件“有横幅”,那么它可能会输出一些HTML内容到页面。
输出内容后,您不能发出HTTP标头。
发送任何其他内容后,您不能发送任何标题。在你的header.php中关闭?>
标签后,一个可能的罪魁祸首是额外的空白。在任何仅用于脚本的php文件中完全省略结束标记通常是一种好的做法。
你的错误应该告诉你什么行(和哪个文件)发送输出。
好了,所以它的固定......不知道怎么不过,也许有人可以解释为什么这工作一下子。
这是我的代码:
include_once ("header.php");
if ($_SESSION['uid']!='programmer') {
if(isset($_SESSION['uid'])) {
echo $_SESSION['uid'];
}
header('Location: index.php');
exit;
}
让我再说一遍,这一切工作吧! PHP ...你为什么现在工作?
这将无法正常工作$ _SESSION ['uid']被设置。然后回声将在调用标题之前发生,这是一件坏事!所以,除非您在header.php中切换输出缓冲,否则这只会在未设置$ _SESSION ['kid']时才起作用。 – 2012-06-03 18:22:13
@PeterBagnall是正确的,逻辑有缺陷;首先,当你认为有可能没有设置值时,你正在检查$ _SESSION ['uid']的值,然后检查它是否被设置... if(isset($ _ SESSION ['uid']) ){ 应该在第一个if语句中进行。 **第二**:它可能工作的原因是如果$ _SESSION ['uid'] = NULL;因此没有数据被发送到浏览器。 – Valerie 2016-02-24 04:12:03
我就曾经是如下重定向功能碰到了类似的错误(也看似无处):
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;
}
希望这可以帮助别人有这个问题!
我不明白这是如何工作的,除非使用了ob_start(),而您没有在代码中指明它。根据PHP:flush()尝试**将当前输出一路推送到浏览器**,但有一些注意事项。将内容数据发送到浏览器后,无法返回并编辑标题。 http://php.net/manual/en/function.flush.php – Valerie 2016-02-24 04:21:38
“header.php”文件中是什么? – 2009-11-24 22:49:23
横幅,配置包括连接到数据库,和一些jQuery。非常重要的文件。 – Marcus 2009-11-24 23:13:51
那为什么叫'header.php'呢?为什么不'init.php'或什么? – ceejayoz 2009-11-24 23:28:32