ホームページ  >  記事  >  バックエンド開発  >  PHPがヘッダー情報を変更できない問題の解決方法_PHPチュートリアル

PHPがヘッダー情報を変更できない問題の解決方法_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-15 13:35:071014ブラウズ

実際の使用中

たとえば、次のエラーは、PHP がヘッダー情報を変更できないことを警告します:

警告: ヘッダー情報を変更できません - ヘッダーはすでに送信されています

PHP プログラムを書き始めたばかりのときに、これに遭遇した可能性があります。 . この問題に遭遇しました。文字通り、これは次のことを意味します:

警告: ヘッダー情報は変更できません - ヘッダーはすでに送信されています。 。 。

それでは、この PHP はヘッダー情報を変更できないという警告が表示される理由は何でしょうか?

つまり、header() 関数または setcookie() 関数の前に次のような出力コンテンツがある場合です。

header("content-type:

text/html;charset:utf-8");

  1. ?>
  2. 上記のコードには警告が表示されます。
    header と setcookie の前に出力があると警告エラーが発生するのはなぜですか? PHPの処理過程を理解するとわかりやすい!
  3. では、PHP はヘッダー情報を変更できないという事実にどのように対処するのでしょうか? スクリプトに何らかの出力 (最初の出力) がある場合、PHP は最初にヘッダー情報をクライアントに送信し、次に出力コンテンツ (つまり、http プロトコルのメインコンテンツ) を送信します。これは、変更できない場合です。送信されたヘッダーは何らかの方法で変更されているため、header や setcookie などのヘッダーを変更する関数を使用して何もすることはできません。 それでは、PHPがヘッダー情報を変更できない問題を解決しましょう! 最初の方法はとても簡単です。ヘッダーと setcookie の前に出力コンテンツが存在しないようにしてください。まずはそれらを書いてみてください。 2 番目の解決策は、PHP のアウトバッファー出力バッファーを使用することです。PHP の出力バッファーは、プログラムの実行時に、ヘッダーとアウトバッファーが一緒に送信されます。 。 終わり。
2 つの方法があります。1 つは、PHP.ini で outbuffer を有効にする方法です。output_buffering のデフォルト値は 0 です。出力バッファーの最大値を制限したい場合は、Off または On に設定できます。このオプションを指定された最大バイト数に設定します (例: Output_buffering=4096)。

PHP がヘッダー情報を変更できないようにするもう 1 つの方法は、PHP スクリプトでヘッダー情報を有効にすることです。

プログラムの先頭またはパブリック ファイルの先頭で関数 ob_start() を呼び出します。

この方法で、PHP の次に、任意の操作を実行できます

<ol class="dp-xml"><li class="alt">
<span class="tag"><</span> ?PHP   </li><li><span>ob_start();  </span></li><li class="alt"><span>echo "dfdfd";  </span></li><li><span>//注意不能卸载ob_start() 前面  </span></li><li class="alt"><span>header("content-type:text/<br />html;</span><span class="attribute">charset</span><span>=</span><span class="attribute-value">utf</span><span>-8");  </span></li><li><span>setcookie();  </span></li><li class="alt"><span class="tag">?></span><span> </span>
</li></ol>

gzipを開始したい場合は、ob_gzhandlerコールバック関数ob_start("ob_gzhandler");を追加できます

アウトバッファに関する関数がいくつかあります:

ob_flush ()

出力バッファーを送信 (出力バッファリング)

ob_end_flush()

出力バッファー (出力バッファリング) を送信し、出力バッファリングメカニズムを無効にします。

ob_end_clean()

出力バッファを送信せずにクリアし、出力バッファリングを無効にします。

ob_g​​et_contents()

現在の出力バッファを文字列に返します。スクリプトによって出力された出力を処理できます。

ob_g​​et_clean()

現在の出力バッファを文字列に返します。スクリプトによって発行された出力を処理し、出力バッファリング メカニズムを無効にすることができます。

PHP マニュアルを参照できる関数もいくつかあります。 Search ob_

<ol class="dp-xml"><li class="alt">
<span class="tag"><</span> ?PHP  </li><li><span>ob_start();  </span></li><li class="alt"><span>print "Here's a pretty dumb way <br />to calculate the length of a string.";  </span></li><li><span>$</span><span class="attribute">length</span><span> = </span><span class="attribute-value">strlen</span><span>(ob_get_content());  </span></li><li class="alt"><span>ob_end_clean();  </span></li><li><span class="tag">?></span><span> </span>
</li></ol>

PHP がヘッダー情報を変更できない例は、文字列の長さを決定する非常に非効率的な方法を示しています。 strlen() 関数を単に使用するのではなく、最初に出力バッファリング メカニズムを有効にし、文字列を出力してから、出力バッファの長さを決定します。最後に出力バッファをクリアし (送信ではなく)、出力バッファリング メカニズムを無効にします。


http://www.bkjia.com/PHPjc/445932.html

www.bkjia.com


tru​​e

http://www.bkjia.com/PHPjc/445932.html

技術記事

実際の使用では、たとえば、次のようなエラーが表示され、PHP はヘッダー情報を変更できないことを警告します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。