重複の可能性:
ヘッダーはすでにPHPによって送信されています
だから私は私のページにこの出力を持っています..なぜ私がそれをポップアップさせるのか理解していません。 phpは初めてなので、簡単に修正できるかもしれません。
-すべての重要な情報を含むheader.phpファイルと、ページのバナーがあります。このheader.phpはすべてのページに含まれています。
-セッション値をチェックして、ユーザーが特定のページにアクセスできることを確認します。ユーザーがそこにいることを許可されていない場合、私はユーザーをログインページにキックバックします
ただし、ここでエラーが発生します。これは私が持っているものです:
include_once ("header.php");
if ($_SESSION['uid']!='programmer')
{
header('Location: index.php');
echo 'you cannot be here';
exit;
}
リダイレクト先のインデックスにもヘッダーがあります。では、これらの複数のヘッダー参照があると、このエラーが発生しますか?私はこれを行う他の方法を見ていません、そしてそれは私を狂わせています!
テキストがブラウザに出力されると、header()
を使用できなくなります。 _header.php
_ includeはおそらくHTMLを出力するため、header()
は使用できません。
これはいくつかの方法で解決できます。
header.php
_がuidセッションやその他の重要なものを設定することを示しているため、これは機能しません)。ob_start()
を呼び出して、出力をバッファリングします。Header.phpファイルに「バナーがある」場合は、おそらくHTMLコンテンツをページに出力しています。
コンテンツを出力した後は、HTTPヘッダーを発行できません。
他のコンテンツを送信した後にヘッダーを送信することはできません。非常に可能性の高い原因は、閉じた後の余分な空白です?>
header.phpのタグ。通常、スクリプトのみのphpファイルでは終了タグを完全に省略することをお勧めします。
エラーは、どの行(およびどのファイル)が出力を送信しているかを正確に示しているはずです。
了解しました。修正されました。どうすればよいかわかりませんが、なぜこれが突然機能するのかを誰かが説明できるかもしれません。
これは私のコードです:
include_once ("header.php");
if ($_SESSION['uid']!='programmer') {
if(isset($_SESSION['uid'])) {
echo $_SESSION['uid'];
}
header('Location: index.php');
exit;
}
繰り返しますが、これですべて機能します。 PHP ...なぜ今働いているのですか?
以前は次のようなリダイレクト機能に関して、同様のエラーが発生しました(これもどこからともなく発生しているようです)。
_function Redirect($url) {
flush(); // Flush the buffer
header("Location: $url"); // Rewrite the header
die;
}
_
どうやら、古いヘッダーを完全にフラッシュするには、ob_flush();
も追加する必要があります。新しい関数は次のとおりです。
_function Redirect($url) {
flush(); // Flush the buffer
ob_flush();
header("Location: $url"); // Rewrite the header
die;
}
_
これがこの問題を抱えている他の誰かに役立つことを願っています!