header関数 : PHP

Pocket

PHPのheader関数の覚書。

PHPはheader関数 でHTTPレスポンスのステータス・ラインやレスポンス・ヘッダを操作できる。PHPは何かを出力するときその直前にHTTPレスポンスを出力する。そのためheader関数はPHPの全ての出力の前に記述する。

header関数関連の具体的なエラーの例

例1

<html>
<?php
header("Location : http://example.com");
?>
</html>

header関数の前に<html>が記述されておりこの直前でHTTPレスポンスが出力済みになる。

例2

<?php
    print("Hello World");
    header("Location : http://example.com");
?>

header関数の前にprint文が記述されており、PHPはprint文を出力する直前にHTTPレスポンスを出力済み。

例3

<?php
require_once("inc.php");
header("Location : http://ameblo.jp/kinokohirame/");
print("Hello World");
?>

---------- inc.php ----------

← inc.phpの先頭行(空行とする)

< ?php
・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・
?>

インクルードするファイルの先頭に空行が存在しする。空行がPHPからの出力となりheader関数の前にHTTPレスポンスが出力済みとなる。

バッファリング

バッファリングを行うことで上記の問題を解決することができる。

注意: PHP 4 では、この問題に対処するために出力のバッファリングを使用する ことが可能です。この場合、ブラウザへの出力が送信するまでサーバに全てバッファリングされるオーバーヘッドがあります。出力バッファリングは、 ob_start() と ob_end_flush() をスクリプトでコールするか php.ini またはサーバ設定ファイルの設定ディレクティブ output_buffering を設定することにより 行うことが可能です。

output_bufferingをOnにするか数字を指定するとバッファリングが有効になる。Offにすると無効になる。

コメント

Trackbacks

  1. […] 力があるとエラーが出る。includeしているファイルのの上下に空白があったり、BOMつきだとエラーが出る。 output_bufferingをOnにするとよい(header関数 : PHP | FindxFine -Web制作に関するメモ-)。 […]

    ピンバックbySanRin舎 » PHP — 2011-06-20 @ 11:05 PM


コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。