- ベストアンサー
PHPのheader関数の疑問
header関数について疑問がありご質問させていただきます。 header関数について下記の説明をみつけました。それに関して質問があります。 『覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。』http://fol.axisz.jp/php/man/php/function.header.html 上の説明文にしたがって下記のコードを試しましたが正常にリダイレクトされました。上記は以下に示すコードでエラーとなると考えましたが違うのでしょうか ---------------- 以下 PHPファイル --------------- <html> <body> <?php header("Location: http://exsample.co.jp"); ?> </body> </html> ----------------------------------------------------- 上記のPHPファイルでエラーが発生せず正常にリダイレクトされましたが引用で書かれていることはどういうことなのでしょうか。 近くに聞く人がいなくて困っています。宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#2です。 headers_sent()は、ヘッダ情報が既に送られているかどうかチェックする関数です。 falseが戻ったということは、1行目の<html>によって送られているはずのヘッダ情報が送られていないということになります。 もしかしてphp.iniのoutput_bufferingがOn(または数値)になっていませんか? もしなっていたらOffにしてみてください。
その他の回答 (3)
- hrm_mmm
- ベストアンサー率63% (292/459)
読みが浅いかも? phpマニュアルのその記述の直ぐ下に >注意: PHP 4 では、この問題に対処するために出力のバッファリングを使用することが可能です。 中略 >php.ini またはサーバ設定ファイルの設定ディレクティブ output_buffering を設定することにより行うことが可能です。 どんなサーバーをお使いなのか書いてありませんが、 phpのversionとphp.ini設定とサーバ設定ファイルとを見直してみましょう。
質問者さんの環境がわからないので何とも言えませんが、通常は Warning: Cannot modify header information - headers already sent by (...以下略 のように警告がでてリダイレクトしないはずです。 ちなみにサンプルの header("Location: http://exsample.co.jp"); の部分を var_dump( headers_sent() ); に書き換えるとどうなりますか?
お礼
早速のお返事ありがとうございます。 ご指摘のようにvar_dump(headers_sent());にかえると bool(false) が表示されました。 宜しくお願いします。
- ceshkr
- ベストアンサー率28% (2/7)
僕はそのコードでエラーになりました。
お礼
早速のお返事ありがとうございます。通常はエラーになるんですね。私の環境ではやはり正常にリダイレクトされますが、通常エラーが発生すると分かっただけでもスッキリしました。ありがとうございました。
お礼
ご回答ありがとうございます。 ご指摘のとおりでした。phpマニュアルの読みが不十分でした。次からは正確に読めるようにしたいと思います。 またよろしくお願いします。