2017-09-17 3 views
1

を送信した後:コールヘッダー()の出力は、PHPのドキュメントによると

ヘッダ()任意の実際の出力が送信される前にいずれかの通常のHTMLタグ、ファイル内の空白行によって、呼び出される必要があり、またはPHPから。 include、require、関数、または別のファイルアクセス関数でコードを読み込み、header()が呼び出される前に空白または空行が出力されることは非常によくあるエラーです。単一のPHP/HTMLファイルを使用する場合も同じ問題があります。

が、ときに私は(少しの変化で)ドキュメントレポートがあることの例を試してみました:

<html> 
<?php 
/* This will give an error. Note the output 
* above, which is before the header() call */ 
header('X-Header: http://www.example.com/'); 
exit; 
?> 

すべてがうまく働いていた、エラーがアップpopedないと私はスムーズに出力して、私の<html>タグを持って、私のX-Headerがヘッダーにあります。

私はPHP 7.1.9を使用していますので、ドキュメントの内容は正しいですか?

+0

これは、 'php.ini'設定で設定されたいくつかの設定によって多少異なります。とにかく出力後にHTTPヘッダーを変更するのはあまり意味がありませんが、出力前にヘッダーが呼び出されるようにプログラムを構成する必要があります。 – Qirel

答えて

4

ドキュメントは正しいです。

パフォーマンスのために、インタープリタは出力をバッファに入れます。バッファが初めて満たされると、バッファの内容を送信する前にヘッダーが送信されます。

これにより、ヘッダーを送信する前にスクリプトが少量の出力を生成できるようになります。

output buffering設定の詳細については、こちらをご覧ください。

オプションoutput_bufferingは、機能を有効または無効にしたり、バッファのサイズを設定したりすることができます。

オプションimplicit_flushは、出力ブロックごとにバッファをフラッシュするようにインタープリターに指示します。これにより、スクリプトはすべての出力の前にヘッダーを正しく送信します。

-1

編集ごphp.inienable Output Buffering ..

+0

これは既にオンになっていて、4096に設定されています – zer0uno

+0

アスカーは、そのコードサンプルでエラーが発生していない場合、既に出力バッファリングを有効にしています。 – jhilgeman

関連する問題