0

我有一个 PHP 代码。当我运行代码时,它可以正常工作,但会出现一些警告,即 -Warning: Cannot modify header information - headers already sent by (output started at /home/fundumob/public_html/app_create/nav_class.php:119) in /home/fundumob/public_html/app_create/profile.php on line 32

我能做些什么 ???,我的代码如下..

 <?php session_start(); error_reporting(E_ALL ^ E_WARNING);?>
 <?php
  //include("local_config.php");
  include("lib/config.php");
  include("nav_class.php");
  $obj=new navig();

  if(isset($_SESSION['user_id']))
  {
  $user_id=$_SESSION['user_id'];
  $pic="select Picture from Profile where user_id=$user_id ";
  $pic_result=mysql_query($pic) or die ("sorry".$pic);
  $count=mysql_num_fields($pic_result);

  if($count==1)
  {

   $rows=mysql_fetch_row($pic_result);

   $_SESSION['picture']=$rows[0];
   $profile_pic=$_SESSION['picture'];

   $photo="profile/".$profile_pic;
    }
   else
   {
    $photo="profile/img.jpg";
   }
   }
   else
   {
   header("location:index.php?er=3");
    }

    ?>

   <div id="templatemo_header_wrapper">

<div id="templatemo_header">

    <div id="site_logo"></div>


      <div id="menu_nav" >
    <ul id="css3menu1" class="topmenu">
    <li class="topfirst"><a href="profile.php?apps=1" style="height:15px;line-
     height:15px;">Dashboard</a></li>
     <li class="topmenu"><a href="#" style="height:15px;line-height:15px;">Profile</a>      
       </li>
  <li class="topmenu"><a href="#" style="height:15px;line-height:15px;">Settings</a>  
   </li>
  <li class="toplast"><a href="#" style="height:15px;line-height:15px;">Prateek    

</ul>
</div>  </div><!-- end of header -->
 </div>

  <div id="tempatemo_content_wrapper">

   <div id="templatemo_content" align="center">

    <div class="recent_projects">

          <div align="right">
           <table width="50%" border="0">
           <tr>
           <td width="85%" height="20" style="border-right:1px solid #D0D0D0;"><div    
         align="right">Welcome&nbsp;&nbsp;&nbsp;<?php echo $_SESSION['fname']."&nbsp;". 
      $_SESSION['lname']; ?></div></td>
           <td width="15%" > <div align="center"><a href="logout.php">Log Out</a></div>
          </td>
           </tr>
           </table>
          </div>

    </div>
  <!--end of recent project-->  
4

8 回答 8

3

There are many solutions to this problem!!!!

1)header() must be before anything else, If header is in any included file then include it at top of page and write session_start in that page containing header.....

2)Use ob_start() at start of page, It will store the output of page in buffer and then output every thing at same time, also use ob_end_flush() at end...

3)Remember to remove empty spaces and echo statements if any before header command

4)Move include("nav_class.php"); $obj=new navig(); just after

    else
     {
      header("location:index.php?er=3");
     }
  include("nav_class.php");
  $obj=new navig();

and in config.php Make sure that there is no echo statement

e.g echo "Database Connection Successful";

Remove comments as well

Also remove or die ("sorry".$pic); in query

于 2012-11-07T06:25:21.863 回答
1

ob_start()在脚本的开头和ob_end_flush()结尾使用。

参考

于 2012-11-07T06:10:20.133 回答
1

Ugly, ugly code....

<?php

@session_start();
error_reporting(E_ALL ^ E_WARNING);

//include("local_config.php");
include( 'lib/config.php' );
include( 'nav_class.php' );

$obj = new navig();

if( !isset( $_SESSION['user_id'] ) ){

  if( !headers_sent() )
    header( 'Location: index.php?er=3' );
  echo '<script type="text/javascript">document.location.href="index.php?er=3";</script>';
  die();

}

$photo = 'profile/img.jpg';

if( !isset( $_SESSION['picture'] ) ){

  $user_id = (int) $_SESSION['user_id'];
  $pic = "SELECT Picture FROM Profile WHERE user_id=$user_id";

  if( ( $pic_result = mysql_query( $pic ) ) && mysql_num_rows( $pic_result )==1 ){
    $row = mysql_fetch_row( $pic_result );
    $_SESSION['picture'] = $row[0];
    $photo = 'profile/'.$row[0];
  }

}else{

  $photo = 'profile/'.$_SESSION['picture'];

}

?>

<div id="templatemo_header_wrapper">
  <div id="templatemo_header">
    <div id="site_logo"></div>
    <div id="menu_nav">
      <ul id="css3menu1" class="topmenu">
        <li class="topfirst"><a href="profile.php?apps=1" style="height:15px;line-height:15px;">Dashboard</a></li>
        <li class="topmenu"><a href="#" style="height:15px;line-height:15px;">Profile</a></li>
        <li class="topmenu"><a href="#" style="height:15px;line-height:15px;">Settings</a></li>
        <li class="toplast"><a href="#" style="height:15px;line-height:15px;">Prateek</li>
      </ul>
    </div>
  </div><!-- end of header -->
</div>

<div id="tempatemo_content_wrapper">
  <div id="templatemo_content" align="center">
    <div class="recent_projects">
      <div align="right">
        <table width="50%" border="0">
          <tr>
            <td width="85%" height="20" style="border-right:1px solid #D0D0D0;"><div align="right">Welcome&nbsp;&nbsp;&nbsp;<?php echo $_SESSION['fname'].'&nbsp;'.$_SESSION['lname']; ?></div></td>
            <td width="15%" ><div align="center"><a href="logout.php">Log Out</a></div></td>
          </tr>
        </table>
      </div>
    </div>
    <!--end of recent project-->

...
于 2012-11-07T06:22:36.380 回答
0

我不建议更好地隐藏警告你修复它你可以用它来隐藏警告......

error_reporting(E_ERROR | E_PARSE);
于 2012-11-07T06:10:53.890 回答
0

您的代码包含错误。我看不到包含文件的内容,但您发布的错误消息是,您尝试在会话已经启动时启动会话。

在你的代码中寻找,session_start()不要做echo之前的事情header()

于 2012-11-07T06:11:07.997 回答
0

在你调用之前不要回显任何数据header(),你不会有这个问题。

于 2012-11-07T06:11:18.413 回答
0

Your nav_class.php is outputting something at line 119, and possibly after that. You are calling header on line 32 of this script:

header("location:index.php?er=3");

There are a few remedies:

  • Don't output anything before calling header
  • call header before including nav_class.php and creating $obj (you're not using $obj before your header call anyway)
  • As swapnesh suggested, use ob_start() and ob_end_flush().

I would favor one of the first two solutions.

于 2012-11-07T06:21:53.870 回答
0

Don't echo or print_r() after header load and if you really want to disable all errors then check index.php file if you are using codeigniter then you can unset all error messages.. there are there option and set

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'development':
            error_reporting(E_ALL);
        break;

        case 'testing':
        case 'production':
            error_reporting(0);
        break;

        default:
            exit('The application environment is not set correctly.');
    }
}

just check your php.ini and then check which type of error you want to and set only one parameter and replace error_reporting(E_ALL); in this function you can replace your parameter

于 2012-11-07T06:34:42.100 回答