- ベストアンサー
PHPのheader関数とは?一度に複数のヘッダを送信できない理由とは?
- PHPのheader関数は、HTTPヘッダを送信するための関数です。
- しかし、PHPのバージョン4.4.2および5.1.2以降では、一度に複数のヘッダを送信することができません。
- この制限は、ヘッダインジェクション攻撃を防ぐための措置です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
header 関数の引数に複数指定できないだけでは? NG: header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"."\n"."Etag: $etag"); ちなみに、MySQLのクエリーを実行する関数 mysql_query にも複数指定することはできません。 NG: $query = "select * from hoge1; select * from hoge2"; mysql_query($query); SQLインジェクションをある程度防げます。
その他の回答 (1)
もともと複数指定することはできないのではないでしょうか? 詳しい経緯は分かりませんが、不正アクセス対策?なのではないでしょうか? header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); header("Etag: $etag"); はOKです。 echo する前であれば、header 関数はいくつでも呼べます。
お礼
早速、ご回答ありがとうございます。 header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); header("Etag: $etag"); がOKということであれば問題は解決しました。 実際にPHPに書き込んで試してみたところ、 エラーもなく、また、ヘッダ情報にも反映されています。 (PHPのバージョンは4.4.6) 「一度に複数のヘッダを送信」の意図がいまいち釈然としませんが、 きっとANo.1でご回答いただいたことなのでしょうね。 ありがとうございました。
お礼
早速のご回答ありがとうございます。 ということは、以前は NG: header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"."\n"."Etag: $etag"); の書式があったけども、禁止されたということですか? そして、 header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); header("Etag: $etag"); の使い方は、問題ないということでしょうか? 念のため、ご教示いただけると幸いです。よろしくお願いいたします。