ホームページ  >  記事  >  バックエンド開発  >  PHPがヘッダー情報を変更できない問題の解決策

PHPがヘッダー情報を変更できない問題の解決策

不言
不言オリジナル
2018-07-23 16:17:492437ブラウズ

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&#39;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 サイトの他の関連記事を参照してください。

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