标题警告

时间:2011-04-20 08:32:27

标签: php

  

可能重复:
  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>&nbsp;        &nbsp;<?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');
?> 

3 个答案:

答案 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或其他文本,以便您知道是否要重定向到索引页。