質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

2608閲覧

PHPにおける header 関数と、他の言語におけるヘッダー出力方法の違い

SofPyon

総合スコア65

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/03/01 08:39

PHP では、HTMLヘッダーに何かしら行うのに、 header 関数を使います。

しかし、他の言語では、そのように、ヘッダー用の関数は用意されておらず、通常の、ブラウザ上に表示させる文字も、ヘッダーも、すべて echo のような命令を使って出力します。

PHPでは、 headerecho(print) を使い分けていて、他の言語では使い分けていない理由は、なんとなくわかるのですが、うまく言葉で説明できません。

うまい説明の方法を教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

PHPの場合、特に指定しないとHTTPヘッダに"Content-Type: text/html"が自動的に付加されると言う機能があるので、そのためですね。
header関数がないと、他の言語のように、毎回Content-Typeヘッダ、および「HTTPヘッダとボディの区切りの空行」をプログラムから明示的に出力する必要があります(※1)。これが面倒というか、初心者に分かりにくいということだと思います。何も知らない人でもそれなりに使えるというのがPHPの売りなので。

Location:ヘッダを出力すると自動的にHTTPステータスコードが302になるとか、HTTPステータスコードを200以外のものを指定したりする機能は、今は、PHPのheader関数にも、CGIの仕組みにもあります。

※1: あるいは、"Content-Type: text/html"固定で、それ以外の物を返せないという言語にするか。

投稿2015/03/02 06:20

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

しかし、他の言語では、そのように、ヘッダー用の関数は用意されておらず、
通常の、ブラウザ上に表示させる文字も、ヘッダーも、すべて echo のような命令を使って出力します。

CGI は HTTP サーバとのやりとりが標準出力なので、レスポンスヘッダも echo や print のような関数で出力します。これは言語の仕様というより CGI の仕様です。

が、PHP は Web アプリに特化しているので CGI 用のバイナリを通常のバイナリとは別に用意しており、通常の CGI プログラムとは異なる記述になっています(なにもしなくてもデフォで Content-type が出力されたり)。

つまり、以下のとおりに説明できると思います。

  • CGI では普通はレスポンスヘッダーも echo や print のような関数で標準出力に出力する
    • print "Content-type: text/html; charset=UTF-8\r\n\r\n" とか
  • PHP は CGI 専用のバイナリを用意しているので異なる
    • header() 関数を使っておけば PHP が良きに計らってくれる

CGI 以外のアプリケーションサーバであれば WSGI とか Rack とかだと思うので、他の言語でもレスポンスヘッダーを echo とか print とかで出力するようなことはしないと思います。

投稿2015/03/02 01:27

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SofPyon

2015/03/07 02:52

お礼が遅くなりすみません。 PHPがWebアプリの製作に特化しているため、わざわざ、header() という特殊な関数があるのですね。 回答ありがとうございました。
guest

0

「他の言語では」ってのが曖昧ですねw

PHPは元々WEBの為に作られた言語です。
で「header」は基本原則として「何よりも先に出力される」メッセージだと言うことです。
これは通常のWEBページを作成してるだけだと質問のように「header」と「echo」の違いが見いだせないと思います。

ですが、例えばブラウザに表示させるんじゃ無くてダウンロードさせたいとか、遷移させたいとか、ブラウザに表示以外の特別なことをさせたい際はheaderを使います。

多少雑に言えばブラウザに今からこのページはこういうデータを送るからねってのを知らせるための命令がheaderだと思えば多少はわかりやすいですかね?

よくPHPでも遷移させる場合は

lang

1header("Location: index.php");

とかはよくやるんじゃ無いでしょうか?
これなんかもheaderより先にechoで出力してるとエラーが出るのでイライラした事がある人は多いかもw

投稿2015/03/01 13:02

landy77

総合スコア1614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問