PHP を使用して Web サイトまたは Web ページを作成すると、次のエラー メッセージが表示されることがあります。PHP 警告: ヘッダー情報は変更できません。このエラーは通常、コンテンツを送信する前に HTTP ヘッダーをブラウザに出力するときに HTTP ヘッダーを変更しようとしたことが原因で発生します。この問題は深刻ではないように見えますが、PHP コードで予期しないエラーが発生する可能性があります。この記事では、この問題を解決する方法について説明します。
「ヘッダー情報」とは何ですか?
この問題を理解する前に、「ヘッダー情報」とは何かを知る必要があります。 「ヘッダー情報」とは、ブラウザとWebサーバー間でやり取りされる情報のことです。この情報には、ページのエンコード、言語、有効期限、キャッシュ制御、Cookie などに関する情報が含まれます。 PHP では、header() 関数を使用してこの情報を変更できます。
原因分析
PHP コードで header() 関数を使用して HTTP ヘッダーを変更する必要がある場合、PHP の実行エンジンは、HTTP ヘッダーがブラウザーに送信される前に出力がないことを要求します。 PHP には、エコー、印刷、スペース、キャリッジ リターン、ライン フィードなど、さまざまな出力方法があります。 HTTP ヘッダーが送信される前に出力がある場合、PHP は「ヘッダー情報はすでに送信されました」エラーを生成します。これが、「PHP 警告: ヘッダー情報を変更できません」エラーが発生する理由です。
解決策
この問題を解決するには 3 つの方法があります:
コンテンツを出力する前に、コード内にスペース、復帰、改行などの無駄な文字が含まれていないことを確認する必要があります。これは、これらの文字も出力を生成するため、HTTP ヘッダーが送信される前に出力が存在し、「ヘッダー情報はすでに送信されました」エラーが発生するためです。
ob_start() 関数は出力バッファを開き、すべての出力がメモリにキャッシュされ、HTTP ヘッダーがブラウザには送信されません。 PHP コードの最後で、ob_end_clean() 関数はすべてのバッファをクリアし、すべての出力をブラウザに送信します。
ob_start() 関数と ob_end_clean() 関数の使用方法は次のとおりです。
<?php ob_start(); //Your PHP code header('Location: http://www.example.com/'); ob_end_clean(); ?>
上記のコードでは、ob_start() 関数はバッファを開き、header() 関数はHTTP ヘッダーを設定し、 ob_end_clean() 関数はバッファーをクリアし、出力をブラウザーに送信します。
ob_start() 関数と ob_end_flush() 関数の使用方法、および ob_start() 関数の使用方法ob_end_clean() 関数も同様です。違いは、ob_end_flush() 関数がバッファーの内容をブラウザーに送信し、バッファーを閉じることです。このアプローチを使用する場合は、ブラウザーに送信する前に、無駄な出力がないことを確認する必要があります。
方法は次のとおりです。
<?php ob_start(); //Your PHP code header('Location: http://www.example.com/'); ob_end_flush(); ?>
概要
エラー「PHP 警告: ヘッダー情報を変更できません。」が発生した場合は、非常に簡単に変更できるため、パニックにならないでください。解決する。 HTTP ヘッダーを送信する前に出力がないことを確認するか、ob_start() 関数と ob_end_clean() 関数、または ob_start() 関数と ob_end_flush() 関数を使用してください。通常、このエラー メッセージは致命的なエラーではなく警告であるため、パニックになる必要はありません。上記の方法に従う限り、PHP コードは正常に実行されます。
以上がPHP 警告: ヘッダー情報を変更できません - 解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。