「PHPって何ができるか?」を知るために、最小限の PHP を使った Webページが Webブラウザにどんなデータを返すのか? を見ていきます。
目次
1. この記事が前提としている知識
- HTML
- うっすらとしたPHP の知識
2. HTML ファイルの場合(PHP を使わない場合)
Webサーバー上に、以下のHTMLファイル(拡張子が .html
)を用意します。
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hello</title>
</head>
<body>
<p>Hello</p>
</body>
</html>
Webブラウザから Webサーバーに対してこの HTML ファイルを要求すると、以下の HTML データが返ってきます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hello</title>
</head>
<body>
<p>Hello</p>
</body>
</html>
Webサーバーは、要求されたファイルが HTML ファイルであれば、そのファイルの内容をデータとしてそのまま返してくれるのです。それを受け取った Webブラウザは、この HTML を解釈して画面に表示します。
以上、至って普通ですが、Webブラウザと Webサーバーのやりとりは、これが基本となります。
3. PHP ファイルなのに、PHP タグを全く使わない場合
次に、Webサーバー上に 以下の PHP ファイルを用意します。
(この Webサーバーは PHP が使えるように設定してあるとします)
index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hello</title>
</head>
<body>
<p>Hello</p>
</body>
</html>
PHP の記述は一切なく、HTML を記述しただけの内容になっています。先ほどの HTML ファイルと全く同じ内容です。
PHP ファイル(ファイル拡張子が .php
)にしたことで、Webサーバーは PHP の実行エンジンにこのファイルの処理を任せます(先ほどのように、該当するファイルをそのまま返してくれません)。 しかし、上記のファイルには PHP の記述はありません。 この場合、Webサーバーはどのようなデータを Webブラウザに返すのでしょうか?
では、Webブラウザを使い Webサーバーに対してこのPHPファイルを要求してみましょう。 すると、以下の HTML データが返ってきます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Hello</title>
</head>
<body>
<p>Hello</p>
</body>
</html>
これは、PHP ファイルに記述した HTML そのままです。
つまり、PHP ファイルというのは、PHP タグ (<?php ... ?>
) がなければ、HTML ファイルと同じように扱えるのです。
PHP のこの特徴により、「PHP は Web に特化したプログラミング言語である」と言われることがあります(実際には、Web 以外にも使えます)。
4. PHP タグを使って “Hello” と出力した場合
今度は逆に、HTML は一切記述せず、PHP の処理のみを記述してみましょう。
PHP の echo を使って ‘Hello’ という文字列を出力するだけのPHPファイルを用意します。
index.php
<?php
echo 'Hello';
Webブラウザが、Webサーバーに対してこの PHP ファイルを要求した場合、Webサーバーは以下の
HTML データを返します。
Hello
ご覧の通り、PHP で出力した文字列のみとなっています。その他には何も追加されていません。
実は Webサーバーから返ってきたデータの中の「レスポンスヘッダ」という部分を見ると分かるのですが、この返却された文字列は HTMLデータとして 返されています1。 であるのに、DOCTYPE
2 などの記述がないこのデータは HTML としては問題ありです。
こうならないように、PHP を使う場合は、以下のどちらかの方法で HTML として成り立つデータを生成する必要があります。
これは、どちらでも構いません。その時の PHP プログラムの書き方にフィットする方でよいでしょう。
注釈
1: Content-Type
レスポンスヘッダに、text/html
がセットされています。
2: HTML Standard – 12.1.1 The DOCTYPE
5. HTML 直書き + PHP タグを使って文字列を出力する場合
最後に、HTML の記述を直書きした上で、PHP による処理も記述してみましょう。
Webサーバー上に、以下の PHP ファイルを用意します。
index.php
<?php
$greeting = 'Hello';
$today = date('Y:m:d');
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Test</title>
</head>
<body>
<p><?php echo $greeting; ?></p>
<p><?php echo $today; ?></p>
</body>
</html>
最初のところで、
$greeting
という変数に、’Hello’ という文字列をセット$today
という変数に、date() 関数を使って今日の日付文字列をセット
という処理を行い、<body>
タグの中でそれぞれの変数の値を出力しています(<?php ... ?>
タグの中で echo を使っています)。
Webブラウザが、Webサーバーに対してこの PHP ファイルを要求すると、以下の HTML データが返ってきます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Test</title>
</head>
<body>
<p>Hello</p>
<p>2017:08:27</p>
</body>
</html>
Webブラウザ上には以下のように表示されます。
これが、基本的な PHP の使い方になります。
HTML ファイルのように HTML が書け、その中に PHP の処理を埋め込めるのです。
6. まとめ
PHP を使うと何ができるのかについて簡単にまとめます。
- HTML ファイルのように、HTML がそのまま書ける。
- Webサーバーから Webブラウザに返すデータの中3に、PHP プログラムで生成した文字列を出力することができる
- もちろん、PHP はプログラミング言語なので、データベース上のデータを取得・更新・削除など、他のプログラミング言語でできることはたいていできる。
2 と 3 により、いろいろなところから情報を引っ張ってきて、必要なら加工し、その結果を Webブラウザに返すことができますし、ユーザーが入力した値を受け取ってどこかに格納しておくこともできます。
また 1 の特性により、他のプログラミング言語と比較して、HTML との親和性が非常に高くなっており、Webページが作りやすくなっています。
注釈
3: HTMLの中だけに限らないということです。HTTPヘッダにも出力できます。
7. おまけ
PHP の公式サイトにある「PHPにできることは?」も参照することをお勧めします。