PHPのインストールから簡単な動作確認まで

要約

バッケージマネージャでインストールし、/etc/apache2/mods-enabledにリンクができていれば使える。なければa2enmodを使ってリンクを作る。

拡張子が.phpであるファイルに、"<?php echo 10/3; ?>" を書いた所に "3.3333333333333" と出る。

はじめに

ローカルネットでノートPCをウェブサーバーに」の条件のサーバーで作業します。サーバーのOSはDebianまたはUbuntuで、Debian8 と Ubuntu18.04で検証しています。サーバーのIPアドレスは192.168.1.10と仮定します。

ウェブサーバーはapache2(2.4.29)、php7.2です。

PHPの導入

Debian系のLinuxではPHPを入れるとApache2のモジュールとして連携されます。今回のホストではapache2とPHPを同時にsynapticで入れているようです(単に記憶にないだけですが)。aptの履歴を見るとこのようになっています。automaticと記述されているのは依存関係などで自動的に入ったパッケージです。PHP本体とapache2のmodが入っているのがわかります。

adachi@adachi-CF-Y7:~$ sudo zcat /var/log/apt/history.log.2.gz |grep php
Start-Date: 2019-12-19  02:51:13
Commandline: /usr/sbin/synaptic
Requested-By: adachi (1000)
Install: 
php7.2-common:i386 (7.2.24-0ubuntu0.18.04.1, automatic), 
php7.2-cli:i386 (7.2.24-0ubuntu0.18.04.1, automatic), 
php-common:i386 (1:60ubuntu1, automatic), 
php7.2:i386 (7.2.24-0ubuntu0.18.04.1, automatic), 
php7.2-json:i386 (7.2.24-0ubuntu0.18.04.1, automatic), 
php7.2-opcache:i386 (7.2.24-0ubuntu0.18.04.1, automatic), 
apache2-data:i386 (2.4.29-1ubuntu4.11, automatic), 
php:i386 (1:7.2+60ubuntu1), 
php7.2-readline:i386 (7.2.24-0ubuntu0.18.04.1, automatic), 
apache2:i386 (2.4.29-1ubuntu4.11), 
apache2-utils:i386 (2.4.29-1ubuntu4.11, automatic), 
libapache2-mod-php7.2:i386 (7.2.24-0ubuntu0.18.04.1, automatic)

次にapache2のモジュールとして有効になっているかは、mods-enabledにリンクがあるかで調べます。

adachi@adachi-CF-Y7:~$ ls -l /etc/apache2/mods-enabled/|grep php
lrwxrwxrwx 1 root root 29 12月 19 02:51 php7.2.conf -> ../mods-available/php7.2.conf
lrwxrwxrwx 1 root root 29 12月 19 02:51 php7.2.load -> ../mods-available/php7.2.load

mods-availableにプログラム本体と設定ファイルがあり、リンクという形でmods-enabledフォルダにファイルがあると有効ということです。

インストール時にリンクが自動で作られたようですが、こうなっていなければ、手動でリンクを作るか、a2enmodを使ってリンクを作ります。mods-availableを見て、php7.2.confとphp7.2.loadがありmods-enabledにリンクがないことを確認して、

a2enmod php7.2

でリンクができることを確認します。コマンドの引数には.conf, .loadは不要だとは思うのですが。

またsudoだったり、suだったり権限関係の解決が必要かもしれません。

後で必要になるかものパッケージ

PHPのインストールだけでは一緒に入らない拡張扱いのパッケージがあります。この先、必要になるかもというものに、以下があります。必要になった時に入れるということでいいでしょう

php-mbstring
無くても多バイト文字を扱えるようになりましたが、mb_check_encoding()が欲しい時に必要です。
php-intl
日本語の辞書順を可能にしてくれます。

PHPの動作確認

<?php?>で挟まれた部分がPHPの部分で、PHPが動作した結果の文字列と入れ替わります。ページの閲覧者はプログラムの内容を見ることはできません。その他は通常のhtml5です。

(1)の様に内容だけをPHPに書かせることも、(2)の様にタグも含めて書かせることも可能です。

echoは続くコンマ区切りのデータを出力します。""または''で囲んだものは文字列としてそのまま出力されます。

(3)は繰り返しの記述です。$のついたものは変数です。""の中の変数はその値と置き換えられます。

first.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>First PHP Page</title>
</head>
<body>
<h1>First PHP Page</h1>

<h2>(1)</h2>
<p>
<?php
echo 10/3;
?>
</p>

<h2>(2)</h2>
<?php echo "<p>",1001/7,"</p>"; ?>

<h2>(3)</h2>
<?php
echo "<p>";
for ($i = 0; 256>$i; $i++){
   echo "$i ";
}
echo "</p>";
?>
</body>
</html>

このサーバーのアドレスが、192.168.1.10だったとして、ブラウザのURLには次のように書きます。

192.168.1.10/first.php

次のようなページが表示されます。

First PHP Page

(1)

3.3333333333333

(2)

143

(3)

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

もっと短い動作確認

長く打つのは嫌という方は、次のベージを。html5として最低限に近いところまで省いています。

min.php
<!DOCTYPE html>
<title>Minimum PHP Page</title>
<p>
<?php
echo 10/3;
?>
</p>

このサーバーのアドレスが、192.168.1.10だったとして、ブラウザのURLには次のように書きます。

192.168.1.10/min.php

次のようなページが表示されます。

3.3333333333333

PHPの仕組み

ウェブサーバーは要求されたファイルを探し出して、内容をそのまま送信するのが仕事です。

もしも、ファイルの拡張子が「.php」であれば、ウェブサーバーはファイル内にphpプログラムが含まれていることを認識し、phpプログラムを処理した後で結果をクライアントへ送信します。送信する内容は一般のファイルと変わりありません。

この拡張子は、設定により.htmlのままにすることも可能です。そうすると閲覧者は後ろでPHPが動作してることを知ることはありません。しかし、PHPプログラムの含まれないファイルもすべてPHPのモジュールに送ることになります。PHPの記述がなければ何もしないとはいえ、サーバーにとって若干負担となるでしょう。また、管理者もPHPが含まれるファイルを判別しやすいというメリットもあります。そこで普通拡張子を変えて、PHPプログラムが含まれているファイルかどうかをすぐに判断できるようにすることが多いのです。どのような拡張子を使うのかが決まっているわけではありません。サーバーの設定に書けばなんでも使えますが、多くのサーバーが.phpを採用しています。