PHPのheader( )関数で送れる文字列にはどのようなものがあるのか

このQ&Aのポイント
  • PHPのheader( )関数を利用すると、様々な文字列を送信することができます。例えば、レダイレクションを行うためのURLや、送信するデータの種類を指定するためのcontent-typeなどがあります。
  • header関数の第1パラメーターで指定するヘッダーストリングは、ウェブサーバーに対して送信されるヘッダー情報を指定するためのものです。具体的な例としては、リダイレクト先のURLを指定する"Location"や、コンテンツの種類を指定する"Content-type"などがあります。
  • また、header関数の第2パラメーターで指定するreplaceは、同じ種類のヘッダーが既に送信されている場合に、それを置き換えるかどうかを指定するフラグです。デフォルトではtrueになっており、同じヘッダーが送信されていた場合には置き換えられます。
回答を見る
  • ベストアンサー

PHPのheader( )関数

PHPのheader( )で送れる文字列にはどのようなものがあるのでしょうか。 色々なサイトをあたって見たのですが、次のような構文の説明はあっても、それぞれのパラメーターにどのようなものがあるのかを網羅して説明されているものは見当たりませんでした。 header(header string, replace, http_response_code) 私は以下の2つについては使ったことがありますが、特に第1パラメーターのヘッダーストリングとして、他にどのようなものが用意されているのか、それはどんな機能を持つのかを知りたいと思います。 1:header("Location: http://www.some_site_name.com"); // ブラウザーのレダイレクション 2:header("Content-type:image/jpegf"); // 送るデータの種類 詳しく説明して頂ける方、あるいは詳しく説明されているサイトを紹介いただける方、どうかよろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5078/13272)
回答No.1

header string は HTTP応答ヘッダーとして送れるモノは何でも書けます。 一番詳しく書かれているのはRFCですね。 https://tools.ietf.org/html/rfc7231#section-7 (日本語訳) https://triple-underscore.github.io/RFC7231-ja.html#section-7

papashiroSooke
質問者

お礼

ご回答いただき、有難うございます。 そして、お礼が遅れてしまったことを深くお詫びいたします。 日本語訳を読み始めてみましたが、全く何を言っているのかわかりませんでした。 ちょっと大変でも、オリジナルの英語版で呼んでみたいと思います。

関連するQ&A

  • header関数について

    header関数について独自関数を絡ませたいのですがいい方法が 思いつかず悩んでおります。 パソコン用、携帯用サイトがあり携帯サイトのみheaderで飛ばした URLの最後にセッションを付加したいと思っております。 // 分岐により携帯であればセッションを変数作成しています。 $sis_id = '?' . session_name() . '=' . session_id(); // パソコンであれば$sis_idはnullなのでこの状態でもなにも付加されません。 header('Location: hoge.php' . $sis_id); ここまでは問題ないのですが以下のようにURLに他のパラメーターを 持っている場合どうすればいいでしょうか? header('Location: hoge.php?id=5' . $sis_id); これだと$sis_idの頭は?ではなく&が必要になりますよね。 仮に$sis_idの?を外して以下のように書き換えるという手も考えた のですがパソコンの場合hoge.php?id=5&のようなURLになってしまいます。 header('Location: hoge.php?id=5&' . $sis_id); if文で分岐させそれぞれの飛び先をべた書き指定すれば済む話 なのですがソースを簡略化させたく独自関数などで自動化できない ものかと思っております。 詳しい方がおりましたら是非アドバイスなど宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでheader情報がうまく表示できない

    ドコモ対応でXHTMLのヘッダー情報がうまく送れません。 PCからのテストで header('Content-Type: application/xhtml+xml'); をコード挿入すし、サイト表示の確認すると「ファイルのダウンロード 」ダイアログがでます。 header('Content-Type: application/xhtml+xml'); を入れずにテストするとダイアログはでません。 ・display.phpがメインページであくまでもskin.htmlをインクルードして置換しecho表示する感じなのですが・・・・・ 困っています。助けて下さい。 skin.html ----------------- <html> <body> <head> <!--%title--> </head> <body> コンテンツ </body> </html> ----------------- test.php -------------------------------------------------------------------------------------- 変数定義は省略 $html = file_get_contents($temp); $agent = $_SERVER['HTTP_USER_AGENT']; if(preg_match("/^DoCoMo/i", $agent)){ $html = str_replace( "<!--%title-->", $docomo, $html); header('Content-Type: application/xhtml+xml'); echo "$html"; } elseif(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){ $html = str_replace( "<!--%title-->", $softbank, $html); header('Content-Type: application/xhtml+xml'); echo "$html"; } elseif(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){ $html = str_replace( "<!--%title-->", $au, $html); header('Content-Type: application/xhtml+xml'); echo "$html"; } else{ $html = str_replace( "<!--%title-->", $other, $html); header('Content-Type: application/xhtml+xml'); echo preg_replace('/{.*?}/', '', $html); -------------------------------------------------------------------------------------- display.php ------------------------------------------ <?php $temp = "./skin.html"; require_once('./test.php'); ?>

    • ベストアンサー
    • PHP
  • HEADERについて

    無知でお恥ずかしいのですが、PHPで出力する際 header("Content-Type: text/html;charset=EUC-JP"); などと最初にヘッダーを出力すると思うのですが、例えばtest.phpが以下のようになっていた場合でもPHPでヘッダーを出力する必要があるのでしょうか? test.php ※1<?php header("Content-Type: text/html;charset=EUC-JP"); ?> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> <TITLE></TITLE></HEAD> <BODY> TEST <?php echo $test; ?> </BODY> </HTML> 参考書などを見てみると「全ての出力の前に記述する必要がある」と書いてあるだけで、書かずとも正常に表示されますし、仮に文字化けしても <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> と追加すれば文字化けも解決するので、疑問は感じつつも思い出したときにPHPにもヘッダを記述するようにしていたのですが、少しづつPHPを勉強しやれる事が増えてくる内に、記述してあるものと記述して無いものが混在してきて気持ち悪く感じてきました。 皆さんはどのようにされていますか? ※他サイトで配布されているPHPスクリプトなども見てみたのですが、毎回記述している方、一切記述していない方それぞれでした。 あと、全く違う質問ですが、MYSQL接続中にエラー処理でexit;する場合、exit;する前にMYSQL接続を切断する必要ってあるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPのheader()について

    OS:freebsd4.8 PHP:php-4.3.2 apache2 を使用しております。 ドキュメントルートに <HTML> <HEAD> <TITLE>検索エンジン</TITLE> </HEAD> <BODY> <CENTER><H1> 検索エンジン </H1></CENTER> <FORM METHOD= post ACTION = search.php> <TABLE BORDER = 4 WIDTH = 250 ALIGN = CENTER> <TR BGCOLOR = "#CCCCCC"> <TH>検索キーワード</TH> <TD><INPUT TYPE= text NAME= keywd size = 20 /></TD> </TR> <TR> <TH>エンジン</TH> <TD> <SELECT NAME = ENG> <OPTION VALUE = "yahoo">Yahoo!</OPTION> <OPTION VALUE = "google">google</OPTION> <OPTION VALUE = "goo">goo</OPTION> </SELECT> </TD> </TR> <TR> <TD COLSPAN ="2"><CENTER><INPUT TYPE="submit" value="検索" /><CENTER></td> </TR> </TABLE> </FORM> </BODY> </HTML> というtest.htmlをおいてます。 phpスクリプトとして <?php $stringkey = urlencode($keywd); switch($ENG){ case "yahoo": $url = "http://www.yahoo.co.jp/bin/search?p="; break; case "goo": $url = "http://www.goo.ne.jp/default.asp?MT="; break; case "yahoo": $url = "http://www.google.co.jp/search?q="; break; } header("Location: ".$url.$stringkey); header("HTTP/1.1"); ?> search.phpにパラメータを渡していますが 白いページしか表れません。 header()関数の記述が悪いのでしょうか? apache2の設定でしょうか? ちなみに2ファイルともドキュメントルートに配置してます。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPを埋め込んだのに・・・

    <?php $UA = $_SERVER{'HTTP_USER_AGENT'}; if (substr_count($UA,"DoCoMo")) { header("Location: http://tyaku-uta.s140.xrea.com/imode/index.html"); } else if (substr_count($UA,"J-PHONE")) { header("Location: http://www.abcde.com/jphone.html"); } else if (substr_count($UA,"UP.Browser")) { header("Location: http://www.abcde.com/au.html"); } ?> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 8.0.0.0 for Windows"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY> ・ ・ ・ </BODY> </HTML> これで、UAで振り分けようと思ったのですが、うまく作動してくれません。是非、教えて頂けないでしょうか?

    • ベストアンサー
    • PHP
  • PHPのheaderの「一度に複数のヘッダを送信」とは?

    VBAやフォートランは我流で経験してますが、PHP初心者です。 ご教示願います。 「PHP マニュアル」のサイトでheader関数の説明で、 http://jp.php.net/manual/ja/function.header.php 次のような説明を見つけました。 「4.4.2 および 5.1.2 この関数は一度に複数のヘッダを送信できないようになりました。 これは、ヘッダインジェクション攻撃への対策です。」 とありますが、 「一度に複数のヘッダを送信」とはどういうことでしょうか? 同じページの例に、 <?php $last_modified_time = filemtime($file); $etag = md5_file($file); header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); header("Etag: $etag"); if・・・中略・・・} ?> とありますが、 この2つの「header」は「一度に複数のヘッダを送信」にはあたらないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpでcsvダウンロードできない

    phpで配列をCSV にしてボタンを押すとブラウザからダウンロードさせたいのですが、 htmlタグで表示した後に、ボタンを押すとブラウザからダウンロードさせるには、以下の ヘッダーをhtmlタグより下につけると、機能しなくなってダウンロードできなくなって しまっています。 どうしたらいいのでしょうか。 header('Content-Type:application/octet-stream'); header('Content-Disposition:attachment;filename=data.csv');

    • ベストアンサー
    • PHP
  • locationでジャンプした場合GETパラメータは認識されるの?(携帯編)

    (携帯サイトの場合です) I.まず下記のようにlocationヘッダでジャンプさせます。 header("Location: http://hoge.com/test.php?id=ok"); II.ジャンプ先で $id = $_GET["ok"]; とした場合GETパラメータは正常に取得できるのでしょうか。 お分かりになる方よろしくお願い致します。

    • 締切済み
    • PHP
  • レスポンスタイムアウトの回避?headerの操作?

    お世話になります。 題名が分かりにくくてすみません。 以下のソースでお聞きしたいことがあります。 test.htmlからdownloadリンクを押下すると、 downloaded.txtを保存するかどうかユーザにプロンプトが表示されます。 そしてdownloaded.txtにはtest1~test6までの内容が出力されております。 やりたい事は、ブラウザにtest1~test3を表示し、 その後、downloaded.txtにtest4~test6の内容が出力されるようにしたいと考えております。 なぜそうしたいのかと言いますと 実際はtest4~test6までを吐き出す処理時間が長く apacheのレスポンスタイムアウト?の5分に引っかかり ブラウザには何も返されない状態になっているからです。 ですから、レスポンスタイムアウトになる前に ブラウザに何かしらを返せば、 タイムアウトにならずに思ったとおりの動作をするのでは と思った次第であります。 代案でも構いませんので、ご教授宜しくお願い申し上げます。 ------------ test.html ----------------------- <a href="download.php">download</a> ------------ test.html ----------------------- ------------ download.php ----------------------- <?php echo "test1"; echo "test2"; echo "test3"; header("Content-type: application/txt"); header("Content-Disposition: attachment; filename=downloaded.txt"); echo "test4"; echo "test5"; echo "test6"; ?> ----------------------------------------------------

    • ベストアンサー
    • PHP
  • HTTP Response Header 違う文字コードが表示される

    htaccessで redirect permanentを使ってリダイレクトしています http://www.aaa.com/ から http://www.aaa.com/wiki/メインページ  ドメインのHTTP Response Headerを調べると以下のようになっており HTTP Status Code: HTTP/1.1 301 Moved Permanently Location: http://www.aaa.com/wiki/mojibake Content-Type: text/html; charset=iso-8859-1 utf-8ではなくiso-8859-1になるのでurlの末尾が文字化けして困っています。 metaタグではutf-8になってるのですが、何か解決できる方法はありませんか?

    • ベストアンサー
    • PHP

専門家に質問してみよう