ホームページ >バックエンド開発 >PHPチュートリアル >PHPがヘッダー情報を変更できない問題の解決策
PHP を使用しているときに、エラーが発生することがあります。これらのエラーはどのようにして発生するのでしょうか?そして、これらの問題をどのように解決すればよいのでしょうか?これには、PHP という言語をある程度理解している必要があります。ここでは、PHP がヘッダー情報を変更できない問題を解決する方法について説明します。
たとえば、次のエラーは、PHP がヘッダー情報を変更できないことを警告します。
警告: ヘッダー情報は変更できません - ヘッダーはすでに送信されています。
PHP プログラムを書き始めたばかりです。 、この問題に遭遇したことがあるかもしれません。文字通り、これは次のことを意味します:
警告: ヘッダー情報は変更できません - ヘッダーはすでに送信されています。 。 。
では、PHP はヘッダー情報を変更できないという警告が表示される理由は何でしょうか?
つまり、header() 関数または setcookie() 関数の前に出力コンテンツがある場合、たとえば:
< ?PHP echo "hello"; header("content-type: text/html;charset:utf-8"); ?>
上記のコードには警告が表示されます。
header と setcookie の前に出力があると警告エラーが発生するのはなぜですか? PHPの処理過程を理解するとわかりやすい!
それでは、PHP がヘッダー情報を変更できない場合、PHP はどのように対処するのでしょうか?
スクリプトに出力がある場合 (最初の出力)、PHP は最初にヘッダー情報を顧客サービス側に送信します。 その後、出力コンテンツ(http プロトコルのメインコンテンツ)を送信しますが、送信されたヘッダー情報を変更しない場合、そのヘッダーを使用することはできません。 そして、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 の出力バッファリングを有効にし、任意の操作を実行できるようにしました。
< ?PHP ob_start(); echo "dfdfd"; //注意不能卸载ob_start() 前面 header("content-type:text/html;charset=utf-8"); setcookie(); ?>
gzip を開始したい場合は、ob_gzhandler コールバック関数 ob_start("ob_gzhandler");
outbuffer については、次の関数もあります。
ob_flush()
送信出力バッファ (出力バッファ)
ob_end_flush()
送信出力バッファ (出力バッファ) および出力バッファリングメカニズムを無効にします。
ob_end_clean()
出力バッファをクリアしますが、送信はせず、出力バッファリングを無効にします。
ob_get_contents()
現在の出力バッファを文字列に返します。スクリプトによって出力された出力を処理できます。
ob_get_clean()
現在の出力バッファを文字列に返します。スクリプトによって発行された出力を処理し、出力バッファリング メカニズムを無効にすることができます。
There are some function that can be found in the PHP man. Search ob_
< ?PHP ob_start(); print "Here's a pretty dumb way to calculate the length of a string."; $length = strlen(ob_get_content()); ob_end_clean(); ?>
PHP がヘッダー情報を変更できないこの例は、ヘッダー情報の長さを決定する非常に非効率的な方法を示しています。弦。 strlen() 関数を使用して単純に処理されるのではなく、最初に有効になります。 出力バッファリング メカニズムは文字列を出力し、出力バッファの長さを決定します。最後に出力をクリアします バッファ (送信されない) を設定し、出力バッファリング メカニズムを無効にします。
関連する推奨事項:
php の情報を変更するときに例外が発生したため、情報を変更できません
以上がPHPがヘッダー情報を変更できない問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。