0

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

したがって、私の Web サイトは、ヘッダー、フォルダーのページ、フッターを含むスクリプトに基づいています。ログインシステムを導入しようとしましたが、問題は、ヘッダーが既に送信され続けていることです。これは、セッションが設定されていない場合にリダイレクトするように作成する必要があるコードです。

<?php 

if(empty($_SESSION['user'])) 
{ 

    header("Location: login.php"); 

    die("Redirecting to login.php"); 
} 
?> 

ここで、ヘッダーが既に送信された問題を直接確認できると言っているのは正しいことです。送信済?

したがって、ページの p と呼ばれる $_GET 変数として設定された変数があります。if else ステートメントを作成して、$_GET["p"] == ホームの場合、上部のヘッダーを実行するようにできますか?私のheader.phpの、最初に呼び出されたページです。

わかりにくいかもしれませんが、見たいコードのリクエストを残してください


index.php

<?php 
include($_SERVER['DOCUMENT_ROOT'].'/ncms/lib/php/_dc.php');
include($_SERVER['DOCUMENT_ROOT'].'/ncms/lib/php/_ncms_fns.php');

$script   = $_SERVER['SCRIPT_NAME'];
error_reporting(E_ALL);
include($_SERVER['DOCUMENT_ROOT'].'/ncms/default/header.php');
if($_GET["p"] == 'ncms' || !isset($_GET["p"])) {
    include($_SERVER['DOCUMENT_ROOT'].'/ncms/pages/home.php');
} else if(file_exists($_SERVER['DOCUMENT_ROOT'].'/ncms/pages/'.$_GET["p"].'.php')) {
    include($_SERVER['DOCUMENT_ROOT'].'/ncms/pages/'.$_GET["p"].'.php');    
} else {
    include($_SERVER['DOCUMENT_ROOT'].'/ncms/default/404.php'); 
}
include($_SERVER['DOCUMENT_ROOT'].'/ncms/default/footer.php');
?>

ありがとう - ネクロ。

4

5 に答える 5

2

これはerror_reporting(E_ALL);、変数$_GETが存在しない場合に通知が表示され、ヘッダーが既に通知を送信するためです。

と置換する:

if(!isset($_GET["p"])) {
    include($_SERVER['DOCUMENT_ROOT'].'/ncms/pages/home.php');
} else if(file_exists($_SERVER['DOCUMENT_ROOT'].'/ncms/pages/'.$_GET["p"].'.php')) {
    include($_SERVER['DOCUMENT_ROOT'].'/ncms/pages/'.$_GET["p"].'.php');    
} else {
    include($_SERVER['DOCUMENT_ROOT'].'/ncms/default/404.php'); 
}

$_GET['p']存在しない場合は、未定義のインデックス通知が表示されます。

または次のように変更できます。

$_GET["p"] = isset($_GET["p"]) ? $_GET["p"] : '';
if($_GET["p"] == 'ncms' || $_GET["p"] == '') {

コードの実行後にヘッダーを追加すると、ヘッダーの前に出力が存在してはなりません。

あなたの問題は、行 85 の common.php にまだ残っているようです。何かを出力するためです。それを確認する

于 2012-09-29T05:45:58.637 に答える
0

header.phpの先頭に末尾のスペースがないように思われる場合は、BOMの問題である可能性があります。エディターがファイルを「utf-8withbom」または「utf-16withbom」として保存するように構成されている場合、これらの「バイトオーダーマスク」はphpによる出力と見なされます。

于 2012-09-29T07:54:35.687 に答える
0

これは、ヘッダーを送信する前にデータを送信しようとしたときに発生します...既にデータと一緒に送信しているためです。リダイレクトは、ページの他の何よりも先に行う必要があります。これには、大きなヘッダー テキストとすべてのエラーも含まれます。これには、サーバーからブラウザに送信される HTML (表示または非表示) も含まれます。サーバーがブラウザに何かを送信するたびに、ヘッダーが送信され、再度送信することはできません。

したがって、リダイレクトするコードをすべての「ヘッダー」テキストの上に移動し、他のエラーを修正します。

于 2012-09-29T05:45:50.853 に答える
0

session_start何かが出力される前に呼び出す必要があります。または、コードの前に空白が含まれている可能性があります<?php

于 2012-09-29T05:46:09.277 に答える
-1

ステートメントの前のスペースを削除して、<?php再試行してください。

<?phpステートメントの前にスペースがあると、エラー メッセージが表示されることがあります。

于 2012-09-29T05:44:07.860 に答える