前回の Apache2.4 インストール&セットアップ備忘録に続いて今回はPHPの備忘録。
ローカルPCにてWEBサーバー(HTTPサーバー)を動かすだけでも仮想WEBサイトの構築やWEBページ(htmlファイル)の確認は可能ですが、PHPの開発環境も整っていれば何かと便利ですし、実際、コレが無いと自分は手も足も出ないのデス…(´・ω・`)
まだまだ PHP 5.x のシステムも多数残っていますが、今後は徐々に PHP 7.x に移行していくでしょうから、ココはひとつ私も PHP 7.x で逝ってみようかなと・・・
メジャーVer.は 7 で行くとして、マイナーVer.をどうするか?
諸事情により今回は Ver.7.1 で、リビジョンは現時点で最新の 0.0.20 としました。
※)PHP 7.2.x でも基本的なインストール手順は同じハズです…(多分)
ココでは Apache2.4 のインストールを完了し、既に Apacheサーバーが稼働している前提で進めて行きますが、例によってWindowsには管理者権限のアカウントでログインしておきます。
■関連記事
・Windows 7 64bit + MySQL 5.6 / インストール&セットアップ 備忘録 – roomX.jp
・Windows 7 64bit + Apache 2.4 / インストール&セットアップ 備忘録 – roomX.jp
INDEX
1. PHP 7.1.x のダウンロード
PHPの公式サイトにアクセスし上部の Downloads をクリック。
2番目の見出し Old Stable PHP 7.1.20 (Changelog) にある
Windows downloads のリンクをクリック。
お目当ての PHP 7.1.20 は計4つのバージョンが掲載されていますが、ざっくりと説明すると…
Non Thread Safe — WEBサーバーが IIS の場合
Thread Safe — WEBサーバーが Apache の場合
x64 — Windows 64bit版対応
x86 — Windows 32bit版対応
となります。
※)アクセス日時によりバージョンが異なる場合があります。(2018/08/15時点の7.1系最新版は 7.1.20 でした)
※)IIS とは、Microsoft Internet Information Services の略称で、簡単に言えば Windows Server 2008 のようなMS製のサーバー製品の事です。
今回はOSが Windows 7 64bit、HTTPサーバーは Apache を使用するので、二番目の VC14 x64 Thread Safe (2018-Jul-19 11:54:52) に登録されている php-7.1.20-Win32-VC14-x64.zip をダウンロードします。
環境によっては、Visual Studio 2015(VC14)の Visual C++ 再頒布可能パッケージがないと動作してくれません。
ダウンロードページの左列に VC++関連のダウンロードリンクが設置されているので、VC14 (x64) の zipファイルをダウンロードしてインストールします。
2. PHP 7.1.x のインストール
setup.exe などのインストールプログラムは用意されていないので、ダウンロードしたファイルを任意のフォルダに解凍すれば、ひとまずインストールは完了です。
任意のディレクトリに PHP 7.1.20 を解凍しますが、ディレクトリが散らばると後々の管理が面倒なので、前回 Apache 2.4 をインストールした 《svs》 フォルダに 《php_7.1.20》 というサブフォルダを作成し解凍しました。
フォルダの名称は単純に php としても良いのですが、PHPの旧バージョンや新しいバージョンをインストールして試したい場合に少々面倒です。なので、今回は異なるバージョン毎に別々のフォルダを作成してインストールするようにしました。(この方法だとPHPバージョンを切り替える度にWindowsの環境変数やhttpd.confを編集する必要があります)
C:¥
└ svs
├ Apache24
├ php_5.6.37 ← 検証用
├ php_7.1.20 ← 今回はココに展開
├ ...
フォルダ名や階層構造に特に基準や標準などは設けられていないので、自分で使いやすいようにフォルダ階層を決めればOKです。(何処にインストールしたかぐらいは覚えておきませう…)
但し、Windowsの命名規則は守らなければなりませんし、あまり深い場所(階層)にディレクトリを置くとコマンドラインが長くなり、ファイルを参照するのに手間取ることになります。
3. PHPの環境設定
PHPファイルを展開したフォルダにある php.ini-production を探します。
php.ini-production を見つけたら同一フォルダ内にコピーします。
コピーファイルを php.ini にリネーム(ファイル名変更)します。
※この php.ini は後で内容を編集します。
Windows 7 – システム環境変数の設定
[コントロールパネル]→[システム]→[システムの詳細設定]を開き、[環境変数(N)…]ボタンをクリック。
システム環境変数欄の “Path” の項目を探し、[編集(I)…]ボタンをクリック。
;C:¥svs¥php_7.1.20
記述されている値の末尾に、上記の通りPHPをインストールしたフォルダのフルパスを追記しますが、フルパスの先頭に区切り記号となる【;】記号を忘れずに付けてください。
※)既に記述された部分をイジると、Windowsシステムやインストール済みソフトウェアの動作に支障が出るので要注意です。
編集が終わったら[OK]を押して環境変数の設定を終了、Windowsを再起動します。
システム環境変数の “Path” ってのは、常にシステムから見える(監視状態にある)場所が登録してあって、それが愛の告白なのか…、それとも怨嗟に満ちた呪詛なのかは不明ですが、『世界の何処に居てもオマエを見つけてやるぅ!』…ってのを、Windowsが実践しているみたいなモンです。(※超乱暴な例え)
ユーザー環境変数とシステム環境変数の違いは…、ググってみてください。(^^;
PHPが正しくWindowsに組み込まれているか調べるには、cmd を開いて…
php -v
…と入力し【Enter】キーを押します。
下図のように表示されれば、取り敢えずPHPのインストールは完了です。
4. httpd.conf の編集
■参考■
・Apache HTTP サーバ バージョン 2.4 ドキュメント
・動的共有オブジェクト (DSO) サポート
・Apache のハンドラの使用
動的共有オブジェクト (DSO) の登録
続いてApache上でPHPが動作するようにセットアップを行います。
Apache2.4 をインストールしたフォルダの 《conf》 フォルダ内、httpd.conf を開きます。
【# Dynamic Shared Object (DSO) Support】を探します。
多数の 「#LoadModule…」 が記述されていますが、一番最後に…
LoadModule php7_module c:/svs/php_7.1.20/php7apache2_4.dll
…の1行を加え、PHP7 を動的モジュールの一つとして登録します。
※)php7apache2_4.dll のインストールパスは自分の環境に合わせて書き換えが必要です。
拡張子(.php)の登録
.phpの拡張子を持つPHPファイルにアクセスがあった場合、PHPが正しく処理できるようにphp拡張子を httpd.conf に登録します。
httpd.conf の最後に…
#PHP extention (.php)
#
<FilesMatch "¥.php$">
AddHandler php7-script .php
AddType application/x-httpd-php .php
</FilesMatch>
…を追加します。
※)先頭に#が付いているとコメント(注釈)として解釈されます。
※)コメントは無くても構いませんが、多分、自分はイジくり回すので…
※)正規表現で.phpの拡張子を限定指定しているのがカッコイイ…
以前は…
<IfModule mime_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
mime_module モジュールとして↑の2行を追加していましたが、今回は Adminwebさんの【.php拡張子を登録する】 を参考にさせていただきました♪(^^ゞ
php.ini パスの登録
php.ini はPHPの動作を細かく指定・制御するための環境設定ファイルで、PHPをインストールした際に php.ini-production をコピーしてリネームして作成した例のアレです…。
#PHP php.ini-path
#
<IfModule php7_module>
PHPIniDir C:/svs/php_7.1.20/
</IfModule>
モジュールは記述しなくても良さげですが、後から見ても判りやすいように…って事で。
httpd.conf の編集が終わったら Apache サービスを再起動させます。
5. PHP の動作確認
簡単なコードを書いて、実際にApache上でPHPが動作しているか確認してみます。
テキストエディタを開いて以下の3行を記述します。
<?php
phpinfo();
?>
入力が終わったらファイル名を test.php として Apacheをインストールしたフォルダの 《htdocs》 フォルダに保存します。
ブラウザを開いて localhost/test.php とURLを入力。(test.phpまで入力)
右のように表示されれば、取り敢えずPHPのインストール&セットアップは完了しています。
画像ライブラリ GD のインストール
GD は画像処理関連の関数を使用する場合に必須となるライブラリです。
GDのインストール方法をググってみると CUIでコマンドを打ち込んで…というのが数多くヒットしますが、Windows OS の場合は php.ini の一行を編集するだけです。
extension=php_gd2.dll の先頭に記述されている;(セミコロン)を削除します。
編集後に php.ini を上書き保存、Apache を再起動するだけでGDライブラリが使用可能になります。
GDライブラリの有効・無効、phpinfo() や gd_info() で確認できます。
index.php の優先順位
MEMO:403 Forbidden
Windows10 をクリーンインストールした場合など、新規にApacheをインストールした時は、httpd.conf 内、以下に記す DirectoryIndex に、実行優先順位に関係なく(ココ重要!)index.php を記述しないと、phpMyAdminをインストール、実行する場合などに『403 Forbidden』のエラーが発生します。
同一ディレクトリ内に index.html と index.php が混在した場合、デフォルト設定では index.html が優先されますが、これだと index.php をTOPページとして最優先に実行したい場合に困った事になります。(両方混在するケースは希かと思いますが…)
先程の test.php を index.php にリネームして検証してみます。
URL欄に localhost とだけ入力すると、Apacheサーバーは index.php ではなく index.html を優先して読み込みました。
この動作は httpd.conf の dir_module に記述された値の順番で優先順位の変更が可能です。
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
デフォルトでは DirectoryIndex に index.html だけが記述されていますが、ココに…
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
… index.php を追記します。
・・・が、“記述された値の順番で制御される” ので index.php を最優先にしたいならば…
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
…index.html よりも前に index.php を記述します。
httpd.conf を上書き保存してApacheを再起動後、再度ブラウザを開いてURL欄に localhost とだけ入力すると…
今度は、test.php からリネームした index.php がTOPページとして読み込まれました。
ちなみに、index.htm や index.c などを追記すれば、記述された値の順番で処理されます。また、index + 拡張子としなくとも、test.php が先頭に記述されていれば、ディレクトリのTOPページとして test.php が最優先で読み込まれます。
ディレクトリ参照の無効化
dir_module にて index.html や index.php の優先順位を指定しましたが、そのどちらのファイルも存在しなかったり、無効なファイルを指定した場合に、ディレクトリの一覧(ディレクトリ・インデックス)がブラウザに表示されてしまいます。
ローカル環境のみで運用する場合は、コレはコレで便利だったりするのですが、セキュリティ的にはあまり好ましくないので、【403 Forbidden】が表示されるように httpd.conf を編集します。
テキストエディタで httpd.conf を開き、266行目辺りにある…
Options Indexes FollowSymLinks
…の1行にて Indexes の部分を削除し…
Options FollowSymLinks
…とします。
修正後、httpd.conf を上書き保存してApache を再起動。
同じディレクトリにアクセスしてもディレクトリ一覧は表示されなくなり【403 Forbidden】が表示されるようになりました。
※)大抵の有料レンタルサーバーでは、この設定が有効となっているハズです。
php.ini の編集
php.ini の内容を編集すれば、PHPの細かな動作制御を行えますが・・・
項目が多岐に渡るので、追々って事で・・・(^^;
次回は、サーバー三兄弟の最後となる MySQL 5.6 & phpMyAdmin のインストールを行います。