[解決済み] 警告 Cannot modify header information - headers already sent by ERROR [duplicate] ヘッダー情報を変更できません。
質問
以前からこのエラーに悩まされています。
そもそも、空白のせいだとばかり思っていたのですが、さらに調べてみると、これと似たような問題かもしれません。
このヘッダー ステートメントの前に、ユーザーに出力を送信する可能性のあるステートメントがないか探してください。1 つ以上見つかった場合は、ヘッダー ステートメントをそれらの前に移動するようにコードを変更します。複雑な条件文は問題を複雑にするかもしれませんが、問題の解決に役立つかもしれません。PHPスクリプトの先頭で、できるだけ早くヘッダーの値を決定し、そこに設定するような条件式を考えてみましょう。
header()と共にincludeヘッダーが問題を引き起こしていると推測されますが、このエラーを取り除くためにコードをどのように並べ替えたらよいのかわかりません。
どうすればこのエラーを取り除くことができますか?
<?php
$username = $password = $token = $fName = "";
include_once 'header.php';
if (isset($_POST['username']) && isset($_POST['password']))
$username = sanitizeString($_POST['username']);
$password = sanitizeString($_POST['password']); //Set temporary username and password variables
$token = md5("$password"); //Encrypt temporary password
if ($username != 'admin')
{
header("Location:summary.php");
}
elseif($username == 'admin')
{
header("Location:admin.php");
}
elseif($username == '')
{
header("Location:index.php");
}
else
die ("<body><div class='container'><p class='error'>Invalid username or password.</p></div></body>");
if ($username == "" || $token == "")
{
echo "<body><div class='container'><p class='error'>Please enter your username and password</p></div></body>";
}
else
{
$query = "SELECT * FROM members WHERE username='$username'AND password = '$token'"; //Look in table for username entered
$result = mysql_query($query);
if (!$result)
die ("Database access failed: " . mysql_error());
elseif (mysql_num_rows($result) > 0)
{
$row = mysql_fetch_row($result);
$_SESSION['username'] = $username; //Set session variables
$_SESSION['password'] = $token;
$fName = $row[0];
}
}
?>
どのように解決するのですか?
長期的な答えは、PHPスクリプトからのすべての出力は、変数にバッファリングされるべきであるということです。これにはヘッダーと本文の出力が含まれます。そして、スクリプトの最後に、必要な出力を行います。
あなたの問題に対する非常に迅速な解決策は、PHPスクリプトに
ob_start();
をスクリプトの一番最初に追加してください。もし、すべてのスクリプトで必要であれば、header.phpファイルの一番最初に追加してください。
これは、PHP の出力バッファリング機能を有効にします。PHP では、何かを出力する (echo や print を実行する) ときに、HTTP ヘッダを送信しなければなりません。出力バッファリングを有効にすると、スクリプトで出力することができますが、PHPはバッファがフラッシュされるまでヘッダを送信する必要がありません。出力バッファリングを有効にし、それをオフにしない場合、PHP はスクリプトの実行終了後に自動的にバッファ内のすべてのデータをフラッシュします。ほとんどの場合、これをオンにしても害はなく、いくつかの構成ではわずかなパフォーマンスの向上が期待できます。
php.ini 設定ファイルを変更できるのであれば、次の項目を変更または追加することができます。
output_buffering = On
これは、ob_start()を呼び出す必要なく、出力バッファリングをアウトにします。
出力バッファリングについてより詳しく知るには、以下を参照してください。 http://php.net/manual/en/book.outcontrol.php
関連
-
[解決済み】PHP - 構文エラー、予期しないT_CONSTANT_ECAPSED_STRING [閉店].
-
[解決済み】PHPで空の値からデフォルトオブジェクトを作成する?
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】警告。数値でない値に遭遇しました
-
[解決済み】count()パラメータは配列かlaravelのcountableを実装したオブジェクトでなければならない
-
[解決済み】file_get_contents( )が動作しない。
-
[解決済み】SSLピア証明書またはSSHリモートキーがOKでなかった
-
[解決済み] PHP 未定義関数への呼び出し
-
[解決済み] $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて
-
[解決済み] PHPで「Header already sent」エラーを修正する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み】メンバ関数をnullで呼び出す?
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】Laravel 5.2 Storage::makeDirectory($dir) でディレクトリが作成されない。
-
[解決済み] PHP - ストリームを開くのに失敗しました : そのようなファイルまたはディレクトリがありません。
-
[解決済み] PHP と mod_fcgid: handle_request_ipc 関数で ap_pass_brigade が失敗する。
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] PHPで「Header already sent」エラーを修正する方法