可能重复:
Warning: Cannot modify header information - headers already sent by
what is output buffering?
我最近从Bluehost购买了一个托管计划,并将我的网站移到了这里。以前,我的网站工作,我没有收到任何错误,但现在,当我尝试登录时,我收到此错误:
警告:无法修改标题信息 - 已在第84行的/home/rugbyspi/public_html/index.php中发送的输出(输出于/home/rugbyspi/public_html/inc/offline_header.php:15)
问题是标题功能。我想我不能在代码中间使用这个功能,但在我的其他主机上我可以这样做。 知道如何解决这个问题吗?
<?php
session_start();
if (isset($_SESSION['username'])) {
include_once('inc/homepage_header.php');
include_once('lib/stats_func.php');
include_once('lib/user_time_func.php');
update_last_active($username);
?>
<div id="right_menu">
<?php include_once('inc/sidebar_statistics.php'); ?>
<br/>
<?php include_once('inc/sidebar_follow.php'); ?>
</div>
<div id="content">
<div class="text">
<br/>
<h2 class="hr"><?php echo $lang['ann']; ?></h2>
<?php
if(!isset($_REQUEST["start"])) {
$start = 0;
}
else {
$start = $_REQUEST["start"];
}
$query = mysql_query ("SELECT * from news where lang='$language'")
or die ("Couldn't connect to the do database.");
$d=0;
$f=0;
$g=1;
$query = mysql_query ("SELECT * from news where lang='$language' order by id DESC Limit $start, 7") or die ("Couldn't connect to the do database.");
while($news = mysql_fetch_array($query)) {
?>
<h3 class="hr"><font size=1><?php echo $news['tsubmit']; ?></font> <?php echo $news['title']; ?></h3>
<?php
echo $news['body'];
}
echo "<br/><br/><br/>";
echo $lang['pages'] . ': ';
while($order = mysql_fetch_array($query)) {
if($f%7==0) {
echo "<a href='index.php?start=$d'>$g</a>";
$g++;
}
$d++;
$f++;
}
?>
</div>
</div>
<?php
include_once('inc/footer.php');
}
else {
include_once('inc/offline_header.php');
include_once('lib/stats_func.php');
?>
<div id="right_menu">
<?php include_once('inc/sidebar_statistics.php'); ?>
<br/>
<?php include_once('inc/sidebar_follow.php'); ?>
</div>
<div id="content">
<div class="text">
<br/>
<?php echo $lang['welcome']; ?>
<br/><br/>
<?php
if (isset($_POST['submit'])) {
$username = $_POST ['username'];
$password = $_POST ['password'];
$username = strip_tags ($username);
$password = md5 ($password);
mysql_real_escape_string($username);
$query = mysql_query ("SELECT id FROM users WHERE username='$username' AND password='$password'")
or die ("Couldn't connect to the do database.") ;
$result = mysql_fetch_array($query);
if($result) {
$_SESSION['username'] = $username;
header('Location: index.php');
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else {
$ip=$_SERVER['REMOTE_ADDR'];
}
$time = time();
mysql_query ("INSERT into logins (userid, time, ip)
VALUES ('$result[id]', '$time', '$ip')")
or die ("Couldn't connect to the database.");
}
else {
echo $lang['login_error'];
}
echo '<br/><br/>';
}
?>
<h2 class="hr"><?php echo $lang['about']; ?></h2>
<?php echo $lang['intro']; ?>
</div>
</div>
<?php
}
include_once('inc/footer.php');
?>
答案 0 :(得分:1)
在开始会话之前,您必须有一些回音文本。尝试删除session_start()
之前的任何输出,或将该功能移至 offline_header.php
答案 1 :(得分:0)
如果您从错误生成文件之前的第15行提供了代码,那将会很棒。 无论如何,这个错误是由在session_start()或其他header()函数被调用之前完成的输出引起的。
无论是你的输出(如回声,打印等),它也可能是错误消息(通知,警告)的输出,可以在之前的主机上关闭,但现在它们出现之前一些标题功能...
您应该检查第15行上的代码以及所有代码,然后再检查是否产生了错误或直接输出......
希望它有所帮助。
答案 2 :(得分:0)
如错误所示,一旦标题已发送,您就无法修改标题信息(header
函数的作用)。第一次输出文本时会收到标题。
在第84行之前,您有多个输出文本的位置(例如第61,63和65行),并且您包含的文件中可能有更多机会。这意味着您不能在这些行之前使用头函数,或者可能在else
分支中的任何包含调用之前使用头文件。
您应该重新构建代码以放置
if (isset($_POST['submit'])) {...
作为else
分支中的第一件事,并且在您知道查询是否成功之前不输出任何html或其他文本,以便您知道是否要重定向到索引页。