ここから本文です

PHPがなぜhtmlに組み込んで使っている人がいるのかよく分かりません。

アバター

ID非公開さん

2019/3/1921:26:22

PHPがなぜhtmlに組み込んで使っている人がいるのかよく分かりません。

PHPって、「クライアントとサーバー上のさまざまなリソースを仲介するCGIプログラム」を作成するための言語ですよね?
元来CGIというものは、サーバー側の処理を書いた、サーバーのマシンが実行するプログラムであるから、サーバーの中に独立して存在するプログラムであるはずです。

###php in html
クライアント=ブラウザ側のプログラムはJavaScriptが受け持つはずです。
なのに、phpをまるでJavaScriptのようにhtmlに組み込んで使っている人がいます。
phpを実行するのはあくまでサーバー側のマシンですから、
html+phpの組み合わせだと、サーバーが持っているhtmlファイルに対して、
サーバーマシン君がインターネット回線の向こう側からフラフラとやってきて、phpの記述の部分だけ横槍を入れる形で操作してくる、
というイメージになると思います。
操作主体がブラウザで完結しているHTML+JavaScriptという組み合わせにせず、あえてphpをhtmlに組み込む意味がわかりません。

### html in php
phpでechoを使うと、なぜかサーバーマシンのコンソールでなく、ブラウザ上に文字列が表示されますが、これは、サーバーマシンがHTML文書を作成してブラウザに送信している、ということでしょうか?
つまりechoとは、「HTMLを作成し、ブラウザに送信するメソッド」ということでしょうじゃ?
また、phpの内部にhtmlを組み込んでいるものもありますが、それは、
「phpの内部でhtmlタグを宣言すると、htmlファイルが作成され、それがブラウザに送信される」ということが起きているのでしょうか?

ご回答よろしくお願いします。

閲覧数:
154
回答数:
6

違反報告

ベストアンサーに選ばれた回答

ara********さん

2019/3/1921:36:06

HTMLファイルであってもサーバーがいったん目を通して、PHPのコードが書かれていたらそれを処理してからブラウザに送信するよ、ということ

  • アバター

    質問者

    ID非公開さん

    2019/3/2000:39:26

    ご回答ありがとうございます。

    ああ、
    やってることは原理的にはJavaScriptやCSSと変わらないけれども、
    サーバー上のリソースを連携させたい時には、サーバーマシーンを操作しないといけないから、phpが必要ということですね。
    JavaScriptにはできないサーバーサイドの仕事をphpが補っているという感じですね。太陽と月みたいな。

    ところで、phpが組み込まれたhtmlWebページファイルをクライアントブラウザが受け取って読み込んだとして、
    開発者ツールでそのページのソースコードを見ると、phpのコードも見えてしまうのですか?

    もしそうなら、固定パスワード認証ログインページを作ったとして、開発者ツールでソースコードを覗くとパスワードが丸見えになってしまいますね。。。

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜5件/5件中

並び替え:回答日時の
新しい順
|古い順

baa********さん

2019/3/2616:16:20

実際にPHPを動かして、それでも分からなければ再質問することをお勧めしますよ。
https://www.php.net/manual/ja/intro-whatis.php

qo_********さん

2019/3/2015:26:49

Webサーバとやり取りするのは、
ブラウザ以外にも動画プレイヤー等がありますね。

Webサーバはブラウザ等から要求があれば、
データと一緒にMIME typeという、
どの種類のデータかを示す情報も付けて送ってきます。
(Content-Typeと呼んだりもします)
text/plain text/html text/javascript text/css
image/png application/pdf video/mp4

それを受け取ったブラウザ等のアプリケーションは、
MIME type等の情報で、どの様な扱いをするかを決めますが、
アプリがそれに対応していなければ、正しく扱えません。
ブラウザであれば拡張機能を入れたりしますね。

このMIME type。
本来のデータの種類とは別のMIME typeを付けて
送ってくる事もあると覚えておいて下さい。
index.phpを要求して、text/htmlを期待していたら、
データにimage/pngと付けて送ってくるかもしれない。
宅配業者であるWebサーバがそう決めたのか、
荷主であるPHPがそうしてWebサーバに渡したのか。
様々ケースが考えられますね。

プロフィール画像

カテゴリマスター

aki********さん

2019/3/2012:16:51

htmlに書かれたphp部分をhtmlをダウンロードした後にサーバーが干渉してきて書き換える
のでは無いです。

根本的な話から言うと、htmlは元々学術論文を書く為に作られました。
リンクは引用元の論文を素早く参照できるようにと作られました。
学術論文ですから、一度作った文書があとから書き換わることはまずありません。
その為、httpサーバーの基本的な動作は、
「URLによって特定の文書を要求されると、ファイルサーバーから該当ファイルを呼び出して、クライアントへ転送する」
というシンプルな機能しかありませんでした。

しかし、Webが様々な用途に使われるようになると、ただ単に既存のファイルを返すだけでは無く
状況に応じて返すファイルを変更したい。さらには、返すデータそのものをその場で生成したいという需要が生まれました。

そのために用いられるようになったのが、php等のサーバーサイドプログラムです。
クライアントからphp等のそれらのファイルへのアクセスが要求されると、
httpサーバーは今までのようにファイルそのものをそのままクライアントに転送するのでは無く
phpサーバーを呼び出して要求されたphpファイルを実行させます。
phpサーバーはその実行結果(出力データ)をhttpサーバーへと返します。
httpサーバーは受け取ったそれをそのままクライアントへと転送します。
そのデータは主にhtmlですが、必ずしもそれだけとは限りません。
プログラムがどんなデータを出力するか次第です。

さてここで、webサイトをhtmlで作って、その一部だけを状況に応じて変化させたいとします。
状況に応じて内容を書き換えるのですから、php等の出番です。
phpを使う場合、返されるhtmlはphpを使って出力命令を使って書かないといけないので、
html全体を1行づつ出力するようphpを使ってプログラムを組んでゆきます。
書き換える必要があるのはほんの一部ですから、それ以外の部分は延々と
固定の文字列を出力するというプログラムを書き続ける必要があります。
もし、ページ内容を変更したいと思ったときも、
この大量の文字出力プログラムの中から書き換えたい部分を探し出して書き換える必要があります。

……これ、明らかに無駄ですし、面倒くさいですよね?

そこで生まれたのが逆転の発想で、プログラムコードの方をhtmlの一部に埋め込んでしまおうと言うものです。
固定で変わらない部分は普通にhtmlをただ書くだけで良い
変えたい部分にだけ、php等を呼び出すタグを埋め込んでおいて、
その部分だけをphpで処理した結果と置き換えよう。としたのです。

それにはhttpサーバー側にも手を入れる必要があります。
httpサーバーはクライアントからURLで特定のファイルが要求された時、
今までと同じようにファイルサーバーからそのファイルを呼び出します。
httpサーバーは、渡されたらそのファイルの中身を確認して、php等の記述がないかチェックします。
もしあった場合は、その部分をphpサーバーに渡して処理をしてもらいます。
phpサーバーはその実行結果(出力データ)をhttpサーバーへと返し、
httpサーバーは、htmlの一部をその出力データで書き換えます。
こうして完成したhtml(やその他のデータ)を、httpサーバーは、クライアントへ送信します。

クライアント(ブラウザ)側に届く段階で、既に元ソースにあったphpタグは消滅していますし、
ブラウザからは、それがただ転送されたものであるのか、phpで処理されたものなのかを
区別する必要もなく同じデータとして、ユーザーに出力します。

そういう流れになっています。

agu********さん

2019/3/2009:00:00

>HTML+JavaScriptという組み合わせにせず、あえてphpを
>htmlに組み込む意味がわかりません。

ブラウザ側で出来ることなんて限定的
サーバ側でしか扱えないデータを扱うならサーバ側で動作する言語を選択するしかないでしょ
RDBMSはもちろんカウンタや掲示板のログファイルだってサーバに置くしかないわけで



>phpの内部でhtmlタグを宣言すると、htmlファイルが作成され、
>それがブラウザに送信される



http://php.net/manual/ja/language.basic-syntax.phpmode.php

ここからここまでがphpの記述だと宣言した部分以外はそのままブラウザに返される
拡張子がphpのままだけどphp部分がまったくないってファイルだって問題ない



感覚的にはSSI(ServerSideIncludes)のイメージに近いと思う

https://httpd.apache.org/docs/2.4/ja/howto/ssi.html

そういえばSSIって使わなくなったなぁ(phpで完全に置き替えられるから当然だけど)

プロフィール画像

カテゴリマスター

tez********さん

2019/3/1923:00:59

> PHPって、「クライアントとサーバー上のさまざまなリソースを仲介するCGIプログラム」を作成するための言語ですよね?
う~ん...
チョッとピントがズレている感じ...

PHPはその生い立ちから、HTMLとの親和性が強い(HTMLの生成装置としての便利機能がてんこ盛り)という面がありますが、他のスクリプト系言語と基本は変わりません。
HTML専用って事も無いです。

CGI は、ウェブサーバが他の処理系と連携するための仕組みで、PHPだけをターゲットにしている訳ではありません。

PHPが直接クライアントとやり取りするって事はありません。
ウェブサーバから呼び出された PHPが処理結果を返すのはウェブサーバへです。
__サーバから伝えられる様々な情報は、クライアントからの
__情報である事は間違いありませんが


> html+phpの組み合わせだと、サーバーが持っているhtmlファイルに対して、
サーバーマシン君がインターネット回線の向こう側からフラフラとやってきて、phpの記述の部分だけ横槍を入れる形で操作してくる、というイメージになると思います。
多分違います。

HTML と PHPが混在するファイルは、ウェブサーバ処理するのではなく、PHPが処理した結果をウェブサーバに返し、ウェブサーバはそれをクライアントに中継します。

> 操作主体がブラウザで完結しているHTML+JavaScriptという組み合わせにせず、あえてphpをhtmlに組み込む意味がわかりません。
虫食いの HTMLを書いておいて、そのかけている部分を PHPで補完するって使い方(=テンプレートと考えても良い)をしているだけです。
変化の無い部分を直接 HTMLで記述する事で全体像を把握し易い、あるいは理解し易いと感じるからでしょう。


> phpでechoを使うと、なぜかサーバーマシンのコンソールでなく、ブラウザ上に文字列が表示されます
> つまりechoとは、「HTMLを作成し、ブラウザに送信するメソッド」ということでしょうじゃ?
繰り返しますが、PHPを呼び出すのはウェブサーバです。
サーバマシンのOSが呼び出すわけではありませんから、サーバマシンのコンソールに返されるなんて事はあり得ません。

echo(あるいは print)だろうと HTMLモードの部分だろうと PHPでの処理時に PHPの呼び出し元(=ウェブサーバ)に渡しているだけ。
明示的に HTTPヘッダを指定していない場合 PHPが補完してくれる場合もありますが、HTMLとして体裁が整っているかや意味があるかは誰も(=PHPやウェブサーバ)何も補助してくれません。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる