3

重複の可能性:
PHP によって既に送信されたヘッダー

編集** 53行目までに送信されたヘッダーを修正しました。セッションを開始する common.php の最後の行により、ヘッダーが既に送信されています。では、session_start をどこに配置すればよいのでしょうか。

私の index.php -

<?php 
require("common.php"); 
if(empty($_SESSION['user'])) 
{ 
    header("Location: login.php"); 
    die("Redirecting to login.php"); 
}   
?> 
<!DOCTYPE html>

<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
 <!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8" />

<!-- Set the viewport width to device width for mobile -->
<meta name="viewport" content="width=device-width" />

 <title>nCMS | Simplicity, Reimagined.</title>

 <!-- Included CSS Files (Uncompressed) -->
 <!--
 <link rel="stylesheet" href="stylesheets/foundation.css">
 -->

<!-- Included CSS Files (Compressed) -->
<link rel="stylesheet" href="stylesheets/foundation.min.css">
<link rel="stylesheet" href="stylesheets/app.css">

<script src="javascripts/modernizr.foundation.js"></script>

<!-- IE Fix for HTML5 Tags -->
<!--[if lt IE 9]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
 </head>
<body>
<!--INCLUDE HEADER -->

<?PHP include('header.php'); ?>


<!--/INCLUDE HEADER -->

<!--INCLUDE PAGE -->
<div class="row">
Hello <?php echo htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8'); ?>,     secret content!<br /> 


<h3>Hi, I'm Index!</h3>

</div>
 <!--/INCLUDE PAGE-->

  <!--INCLUDE FOOTER-->


<?PHP include('footer.php'); ?>

<!--/INCLUDE FOOTER-->
<!-- Included JS Files (Compressed) -->
<script src="javascripts/jquery.js"></script>
<script src="javascripts/foundation.min.js"></script>

<!-- Initialize JS Plugins -->
<script src="javascripts/app.js"></script>
</body>
</html>

これはライブページです - http://www.cogameservers.com/ncms

助けてくれてありがとう - ネクロ


common.php -

<?php 


$username = ""; 
$password = ""; 
$host = ""; 
$dbname = ""; 


$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 

try 
{ 

    $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
} 
catch(PDOException $ex) 
{ 

    die("Failed to connect to the database: " . $ex->getMessage()); 
} 


$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 


if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) 
{ 
    function undo_magic_quotes_gpc(&$array) 
    { 
        foreach($array as &$value) 
        { 
            if(is_array($value)) 
            { 
                undo_magic_quotes_gpc($value); 
            } 
            else 
            { 
                $value = stripslashes($value); 
            } 
        } 
    } 

    undo_magic_quotes_gpc($_POST); 
    undo_magic_quotes_gpc($_GET); 
    undo_magic_quotes_gpc($_COOKIE); 
} 


header('Content-Type: text/html; charset=utf-8'); 


session_start();
4

2 に答える 2

4

あなたが私のコメントからあなたの問題を解決したことを私は知っています。しかし、ここにそれは答えとしてあります。

すでに送信されたヘッダーエラーを削除するためにsession_startをどこに置くかを尋ねたように。

一般的な方法として、phpファイルの先頭にsession_start()を配置します。以前のバフファーもクリアする必要があります。

ob_start(); // this will clear output buffer
session_start();
于 2012-09-29T18:19:50.320 に答える
3

エラーの原因は、 77 行目で既にヘッダーを送信header("Location: login.php");しているというエラーです。ヘッダーを送信common.phpしている限り、これは続行されcommon.phpます。

Warning: Cannot modify header information - headers already sent by (output started at /home/megatron/public_html/ncms/index.php:9) in /home/megatron/public_html/ncms/common.php on line 77

そのファイルの内容を知らなければ、私はあなたを助けることができません。そのファイルを調べて、ヘッダーを送信する何かを探し、それが必要かどうかを確認するか、この問題に別の方法でアプローチすることをお勧めします。

于 2012-09-29T17:35:21.407 に答える