PHPの動作

PHPは、リクエストを受け取ったWebサーバーが、レスポンスを返す前に動作するプログラミング言語です。

PHPが動作するWebサイト

docker-compose.yml
version: '3'
services:
web:
image: php:apache
ports:
- 8080:80
volumes:
- ./files:/var/www/html
files/index.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Hello World</title>
</head>
<body>
<?php print('Hello PHP!'); ?>
<script>document.write('Hello JS!');</script>
</body>
</html>

プロジェクトディレクトリは以下のようになるはずです。

PHPのDockerプロジェクト

詳細は後にするとして、とりあえず実行結果にアクセスすると、表示は大方予想通りになります。

PHPを含むウェブサイトの表示

しかしながら、ページ自体のソースを表示させてみるといかがでしょうか。

PHPを含むウェブサイトのブラウザ側から見えるソース

Hello PHP!の部分は出力内容しか残っていないことが分かります。これが、サーバーサイドで動作するプログラムの特徴です。プログラムは、実行結果がクライアントに送信される前に実行されるため、ブラウザからはサーバーサイドのプログラムのソースコードを表示させることができません。

動作原理

Dockerイメージのphp:apacheは、PHPが動作するよう設定されたApacheのイメージです。ポート番号は80、ドキュメントルートは/var/www/htmlに設定されています。

このApacheは、拡張子が.phpのファイルに対してリクエストを受けたとき、PHPを起動させます。PHPは、ファイルの中から<?phpから?>で囲まれた部分をPHPのプログラムとして実行します(囲まれていない部分は通常の出力と解釈されます)。この実行結果をApacheが受け取り、クライアント側に返却するようになっています。