在session_start()[function.session启动]:不能发送会话cookie - 标题已经发出已
可能重复:
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();
?>
不能包括任何在调用之前直接发送给用户session_start();
这包括空格,html,等等。
确保您的第一个<?php
之前没有任何空格。确保你在之后包含标头,你叫session_start。这应该解决问题。
尝试改变你的要求,语句的顺序:
<?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会话之前需要的任何内容发送到浏览器中启动。
检查,你可能有echo
,print
这是给你的输出会在你的index.php文件中创建
右键,然后是输出字符浏览器:
<?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文件移动到该行的上方或缓冲输出,直到发送完所有标题。
我编辑我的index.php :: //然后其他代码,它的作品 – sonnet 2012-07-20 17:08:27
在致电session_start()
之前不应生产任何产品。
在您的index.php
中,您包含../Includes/initiate.php
。在此文件中,您包含session.php
,它在其构造函数中调用session_start()
。这会产生一个错误,因为您已经在index.php中生成输出,其中包含header.php
。
由于index.php中包含的顺序,输出仍将在创建会话之前创建。在'header.php'之后调用'initiate.php',它会产生输出。 – Andy0708 2012-07-20 14:09:54
你是对的。还没有看到它。抱歉。 – ralphkurz 2012-07-20 14:13:21