• ベストアンサー

header() 関数が必要になる場面は?

http://php.net/manual/ja/function.header.php にheader() 関数の使い方が説明されていますが、 生の HTTP ヘッダを送信するというのは、オートで送信されているのを カスタマイズしてサーバーの動きを操作するということですよね。 この関数を利用するのは、どういった場合に必要になるのでしょうか。

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

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 例えばですがファイルのダウンロードをさせるPHPを作る場合は以下のようなヘッダを出力します。 header ( 'Content-type: application/octet-stream' ); header ( 'Content-Disposition: attachment; filename="filename.jpg"' ); header ( 'Content-Length: ' . filesize($fileName) ); この場合、ブラウザ側はfilename.jpgという名前でダウンロードのダイアログを出してくれます。 後は画像をブラウザに出力する例として header ( 'Content-type: image/jpeg' ); readfile ( '画像へのパス' ); としておくと <img src="./image.php">とすればブラウザに画像が表示されます。 これなんかはデータベースに直接画像データを保存しておいてその画像を表示するときに利用したりします。 要はこちらで何か特定しておきたい時に利用します。 あと良く使われるのは header ( 'Location: ./index.html' ); とかしておけばこの記述のあるPHPにアクセスがあるとindex.htmlに飛ばされます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • asobi17
  • ベストアンサー率25% (4/16)
回答No.4

以前、短縮URLシステムを独学で作ったのですが そのときに使いました。 流れとしては ・短縮したいURLをフォームに入れる。 ・適当な文字を入れたデータベースから、urlを吐き出す。 こんな感じです。(このURLはダミー) http://adv.php?id=ab  abの所がデータベースから取り出した適当文字です。 ・吐き出したURLを入力されたら、abを手がかりにデータベースから  元のURLを取り出す。 ・あとは転送をかけて、おしまいです。 header('Location':http://www.yahoo.co.jp); ------------------------------- 本当のURL短縮サービスでは、 こんなに簡単じゃないと思いますが、多分原理としてはこんな感じだと思います。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

・PHPでhtml以外を出力したいとき。画像ファイルとかPDFなど そのときにheader()でContent-Disposition: attachment; filename="ファイル名" を指定してファイル名をつける名をつけることによってダウンロード時にそのファイル名になって保存することが出来る。 ・意図的にエラー表示させたいとき(定番の使い方はIPなどによるアクセス拒否) ・ページをリダイレクトさせたいとき

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

こんばんは。 まぁ、 あとは、文字化けの原因になる文字コードを指定したり、 キャッシュの抑制とか・・・。 使い道は様々なので、工夫次第です・・・。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • header関数の使い方について

    現在、下記WebプログラムがPHP等にて開発可能か検討しております。 前提1:既存の認証画面と認可アプリは、カスタマイズを行えない。(共にソースは非公開) 前提2:認証画面からHTTPヘッダに付加してアプリを呼び出し、アプリ側にて値を取得しています。      また、HTTPヘッダの設定内容は判明しております。 前提条件の環境で、HTTPヘッダ情報を強制的に変更する必要が発生してしまい、PHPのheader関数を使用できないか調べております。 認証画面から新プログラム(PHP等)を経由してアプリを呼び出しするように変更した場合、header関数は有効な使い方となりますでしょうか? またアプリのURLを呼び出し時に、考慮しないといけない点とかもあるのでしょうか? 該当する参考のページが見つかりませんでしたので、質問させていただきました。 よろしくお願いします。

    • 締切済み
    • 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
  • header()関数について

    先日i-mode向けのサイトをphpとSmartyを使い作成したとき、疑問に思った事があったので質問させていただきます。 900系以上の端末とそれ以下の端末で別々のテンプレートを使い画面を出し分けていました。 900系の端末ならばXHTMLでi-CSSが使えるとの事でしたのでDoCoMoのサイトを見ながら作っていたのですが、最初うまくCSSが機能しませんでした。 結果から言うと、テンプレートに書いていたmetaタグの内容ををphp側でheader()を使い、吐き出すことによって動作させることができました。 http://php.s3.to/man/function.header.html 上記を見ると「生のHTTPヘッダ文字列を送信 するために使用します」と書かれていますが、テンプレートの<head>~</head>に直接書いてダメな理由が分かりません。 もしも単純にXHTMLのみでphpを使用しない場合、どうすればいいのか等、疑問があります。 ■header()と<head>~</head>に直接書く場合の相違点 ■phpを使わない場合はi-CSSって使えるのか? 以上ご存知の方がいらっしゃいましたらご教授願います。

    • ベストアンサー
    • PHP
  • WordPress 自作header2.php

    ヘッダーをカスタマイズして、別名header2.phpで保存しました。 home.php内にあるget_header();をどうやったらheader2.phpを使うようにしたら良いでしょうか? get_header(2);とどこかで見たような気がしましたので、やってみましたけど、カスタマイズしてないheader.phpが読み込まれています。 header2.phpではなく、他にいい方法がありましたら、教えて下さい。 宜しくお願いします。

    • 締切済み
    • PHP
  • 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ファイルでエラーが発生せず正常にリダイレクトされましたが引用で書かれていることはどういうことなのでしょうか。 近くに聞く人がいなくて困っています。宜しくお願いします。

    • ベストアンサー
    • PHP
  • HTTPヘッダはメタタグにも記述するのでしょうか?

    PHPではheader関数を用いてHTTPヘッダを送信することが出来ますね。 スクリプトからHTMLを丸ごと吐き出す場合、 header関数によるヘッダ送信に併せて HTMLのメタタグでhttp-equivも記述すべきなのでしょうか。 また万一それぞれの記述が一致しない場合にはどちらが優先されるのでしょう。 初心者ながら、健全なスクリプトを目指しております。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • headerのマニュアルを見ると

    <?php // 日付が過去 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 常に修正されている header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // HTTP/1.1 header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); // HTTP/1.0 header("Pragma: no-cache"); ?> という記述がありますが http1.0とhttp1.0の両方の記述をしなければならないのでしょうか? また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

    <?php header("Location: http://www.example.com/"); exit; ?> 上記のheaderですと該当ページに飛んでしまいます。 直接飛んでしまうのではなく直接CGIにURLを送りたいのですが 関数等ありますか?わかりやすく言うとURLだけ送信したい。 clickした事にしたいです。

  • gettype関数 で型チェックをしたら何故ダメ?

    >型のチェックには、この関数ではなく is_* 関数を使います ▽PHP: gettype - Manual   http://php.net/manual/ja/function.gettype.php て書いているのですが、gettypeはなんで利用してはいけないのでしょうか?(もしくは奨励されていないのでしょうか) is_numeric() とか、とっても難しそうなのですが…

    • ベストアンサー
    • PHP