2012-07-20 47 views
-1

可能重复:
Headers already sent by PHP在session_start()[function.session启动]:不能发送会话cookie - 标题已经发出已

我在面向对象的PHP新。此代码在函数php中运行良好,但它在OOP PHP中造成一些错误。

当我打开的index.php然后错误消息等作为表演之下,但所有其他的代码工作很好::

Warning: session_start() [function.session-start]: Cannot send session cookie - headers 
    already sent by (output started at 
    E:\XAMPP\xampp\htdocs\photo_gallery_new\public\layout\header.php:14) in 
    E:\XAMPP\xampp\htdocs\photo_gallery_new\Includes\session.php on line 15 

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - 
    headers already sent (output started at 
    E:\XAMPP\xampp\htdocs\photo_gallery_new\public\layout\header.php:14) in 
    E:\XAMPP\xampp\htdocs\photo_gallery_new\Includes\session.php on line 15 

代码::

的index.php

<?php include ("../public/layout/header.php"); ?> // for design header 
<h2> Menu </h2> 
<?php 

require_once ("../Includes/initiate.php"); // it makes error 
//require_once ("../Includes/user.php"); // it works 
//require_once ("../Includes/database_object.php"); // it makes error  

echo $user->full_name(); 
echo "<hr />"; 
    ?> 
</div> 
    <?php include ("../public/layout/footer.php"); ?> // design for footer 

user.php

<?php 
require_once ("database.php"); 

class USER extends databaseObject { // it makes error 
//class USER { // but it works   
    public $id; public $username; public $password; public $firstName; 
     public $lastName; 
    // user authenticate 
    public static function authenticate($username="", $password="") { ... } 

    public function full_name() {..... } // find full name 
    // common database action 
    public static function record_all_user() { ... } // find all user 

    public static function record_by_id($id=0) {.....} // find specific user 

    public static function record_by_sql($sql="") { ...... } // check sql 
    ?> 

的header.php

<html> 
    <head> 
<title> Photo Gallery </title> 
<link href="stylesheet/main.css" media="all" rel="stylesheet" type="text/css" /> 
    </head> 
<body> 
    <div id="header"> 
    <h1> PHOTO GALLERY </h1> 
    </div> 
<div id="main"> 

session.php文件

<?php 
    class Session {   
    private $logged_in = FALSE; 
    public $user_id;    
    function __construct() { 
     session_start(); 
     $this->check_login();   
      ............................. 
      } 

    public function is_logged_in() {....} // check loged in 

    public function login($user) { ..... } 

    public function logout() { 
     unset($_SESSION['user_id']); 
     unset($this->user_id); 
     $this->logged_in = FALSE; 
    } 

    private function check_login() {... .} // check login 
}  

$session = new Session(); 
?> 

initiate.php

<?php 
    require_once ("Config.php"); 
require_once ("Functions.php"); 
require_once ("session.php"); 
require_once ("Database.php"); 
require_once ("database_object.php"); // this makes error 
require_once ("user.php"); 
?> 

database_object.php

<?php 
require_once ("database.php"); 
    class databaseObject { 

} 
$newClass = new databaseObject(); 
    ?>  

回答

3

不能包括任何在调用之前直接发送给用户session_start();这包括空格,html,等等。

确保您的第一个<?php之前没有任何空格。确保你在之后包含标头,你叫session_start。这应该解决问题。

0

尝试改变你的要求,语句的顺序:

<?php 
require_once ("session.php"); 
require_once ("Config.php"); 
require_once ("Functions.php"); 
require_once ("Database.php"); 
require_once ("database_object.php"); // this makes error 
require_once ("user.php"); 
?> 

PHP会话之前需要的任何内容发送到浏览器中启动。

+0

由于index.php中包含的顺序,输出仍将在创建会话之前创建。在'header.php'之后调用'initiate.php',它会产生输出。 – Andy0708 2012-07-20 14:09:54

+0

你是对的。还没有看到它。抱歉。 – ralphkurz 2012-07-20 14:13:21

0

检查,你可能有echoprint这是给你的输出会在你的index.php文件中创建

0

右键,然后是输出字符浏览器:

<?php include ("../public/layout/header.php"); ?> // for design header 
<h2> Menu </h2>   <----- this line 
<?php 

require_once ("../Includes/initiate.php"); // it makes error 

你必须要么将require_once文件移动到该行的上方或缓冲输出,直到发送完所有标题。

+0

我编辑我的index.php :: <?php require_once(“../Includes/initiate.php”); ?> //然后其他代码,它的作品 – sonnet 2012-07-20 17:08:27

0

在致电session_start()之前不应生产任何产品。

在您的index.php中,您包含../Includes/initiate.php。在此文件中,您包含session.php,它在其构造函数中调用session_start()。这会产生一个错误,因为您已经在index.php中生成输出,其中包含header.php

相关问题