ローカルにテスト環境を作成する

何故ローカルテスト環境が必要か

PHPに限ったことではないですがサーバーサイドスクリプトを実際に本番環境で動かす前にはローカルで動作させる環境を構築し、そこで実際に動かしてみることが望ましいです。配布されたものをそのまま使う場合であっても使用するサーバー環境次第では動作しないということが度々発生し、特にPHPに関しては動かすPHPのバージョン次第でスクリプトが正しく動作しないということがよくあります。手を加えていない状態でもそれなりにリスクがあるのですからスクリプトに手を加えると更に動作しないリスクが上がるのは自明です。動かないというだけならばまだしも、間違った記述をしてしまったためにサーバーに非常に大きな負荷をかけてしまうということも起こりえます。そうなると本番のサーバーが借り物の場合、独占して借りるというのでない限り、同じサーバーを借りている他のユーザーにも多大な迷惑をかけてしまうことになります。

こういった理由のため、本番環境でのトラブルを避けるためにローカルでテストを行うための環境を構築することが必要になります。

nginx+PHPで環境を構築する

このページではWindows10上での環境構築を想定しています。MacやLinuxの人は申し訳ないです。ぶっちゃけここでなくてもググれば見つかると思います、はい。

他に容易にテスト環境を構築するためのソフトとしてXAMPPMAMPがあり、どちらもWindowsとMacに対応しており、XAMPPはLinuxにも対応しています。それらを使用しないのはここで配布しているPHPスクリプトを動かすだけなら必要ないものが多く、ディスク容量をそれなりに消費してしまうので容量をあまり使わないこの方法の解説を行います。

このページではDドライブの直下にnginx.exeが入っているnginxフォルダを置き、そこにphpの本体も一緒に入れるというフォルダ構成で環境を作ります。大まかには以下のような感じになります。DドライブがなければCドライブと置き換えてみてください。

D:\nginx\
├ conf\         各種設定ファイルが入っているフォルダ
│ └ nginx.conf 設定ファイル
├ contrib\
├ docs\         必要ないので下の画像の様に削除しても大丈夫
├ html\         サイトのデータを入れるフォルダ
├ logs\
├ temp\
├ php\          PHP本体
│ ├ dev,ext,extras,lib,sasl2フォルダ
│ ├ ファイルたくさん
│ ├ php.ini-developmentをphp.iniにリネーム
│ └ php-cgi.exe
└ nginx.exe

nginxの設定を行う

まずサーバーソフトとしてnginxをこのページからダウンロードしてきます。たくさんありますが一番上にある「nginx/Windows-バージョン」のダウンロードをすればいいでしょう。ダウンロードしたらzipファイルを解凍し、出来たフォルダをDドライブ直下へ移動し、移動したフォルダは名前の後ろにバージョンがついていると思うのでフォルダ名をnginxに変更します。それが出来たらnginxフォルダ→confフォルダと辿り、中にあるnginx.confを開き、次のように編集します。

        #45行目付近(変更前)
        location / {
            root   html;
            index  index.html index.htm;
        }

        #変更後(index.htmlの前にindex.phpを追加)
        location / {
            root   html;
            index  index.php index.html index.htm;
        }
        #65~70行目付近(変更前)
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        #変更後("#"を外し、若干の修正)
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

PHPの設定を行う

PHPのスクリプトを動かすにはPHPが必要なのでこのページからダウンロードをしてきます。ここでは新しさと実際のサーバー環境とのバランスをとって2017年末時点で2番目に新しいPHP7.1のx86 Non Thread Safe版のzipファイルをダウンロードします。本番のサーバーの環境に合わせるならそれに合わせたバージョンを選択した方が良いですが。zipファイルを解凍し、出来たフォルダをnginxフォルダの中に入れ、nginxの時と同じようにフォルダ名の後ろのバージョンを削ってフォルダ名をphpに変更します(変更前はphp-[バージョン]-nts-Win32-VC14-x86になっていると思われますが解凍ソフト次第ではそうならない場合があるかも)。それが出来たら中にあるphp.ini-developmentファイルをphp.iniにリネームし、php.iniを以下の様に編集します。ただしPHPのバージョンによって以下の記述のある箇所はズレがあるのでテキストエディタの検索機能を使って探すとすぐ見つけられると思います。

;変更前
; extension_dir = "ext"

;変更後(行頭のセミコロンを外し、記述を有効にする)
extension_dir = "ext"

また、以下の記述はextension=~がズラズラ並んでいる場所にあり、上と同じように行頭のセミコロンを外しますが、ここで配布されているスクリプトを動かすだけならば最低「extension=php_mbstring.dll」の行のコメントだけ外せば大丈夫です。他は必要に応じて行頭のセミコロンを外しましょう。例えばMySQLまたはMariaDBを使用するならばphp_mysqli.dllの行とphp_pdo_mysql.dllの行頭のセミコロンを外します。注意点としてPHP7.2ではphp_なんとか.dllという記述ではなく、なんとかの部分だけ指定する形になっているようです。例えば7.1まではphp_mbstring.dllの箇所が7.2ではmbstringのみになっています。修正に必要な作業は7.2であっても必要に応じて行頭のセミコロンを外すことには変わりはありませんが。

;変更前(extension=~がズラズラ並んでいる場所)
;extension=php_mbstring.dll

;変更後(行頭のセミコロンを外し、記述を有効にする。また、必要に応じてその付近の行の先頭のセミコロンを外す)
extension=php_mbstring.dll

起動、終了を行う

設定が出来たら実際に動かしますがPHPを使う場合はnginx.exeをダブルクリックするだけではダメなので起動を容易に行えるようにバッチファイルを作ります。nginx_start.batというバッチファイルを作り(ファイル名は何でもいいですが)、次のように記述します。

@ECHO OFF
cd /d D:\nginx
start nginx.exe
start /b php\php-cgi.exe -b 127.0.0.1:9000 -c php\php.ini

echo Starting nginx php-cgi

このバッチファイルを使いやすい場所に置き、ダブルクリックすればコマンドプロンプトのウィンドウが出現し、nginxとPHPが使用できる状態になります。コマンドプロンプトのウィンドウが出ている間だけnginxが起動しているので閉じてはいけません。この状態で「http://localhost/」のアドレスにアクセスして「Welcome to nginx!」とブラウザに表示されれば成功です。この「Welcome to nginx!」と表示されるhtmlはnginxフォルダの中のhtmlフォルダの中にある「index.html」なのでそのindex.htmlファイルを書き換えてブラウザをリロードすれば書き換えた内容が反映されます。PHPが動作しているかを確認するには上記のindex.htmlがある場所と同じ場所にtest.phpを作成し、次のように記述して「http://localhost/test.php」にアクセスし、PHPのバージョンとともに色々な情報が表示されていれば成功です。

<?php
phpinfo();

終了させる場合はnginx_stop.bat(こちらもファイル名は何でもいいですが)を作成して次のように記述し、ダブルクリックすればプロンプトのウィンドウも閉じて終了させることが出来ます。

@ECHO OFF
cd /d D:\nginx

nginx.exe -s quit
taskkill /f /IM nginx.exe
taskkill /f /IM php-cgi.exe

起動しない場合

初めて起動させる場合、警告のようなメッセージが出現する可能性があります。その場合、原因は概ね次の2つである場合が殆どなのでその対策となります。

セキュリティの警告が出る

nginxを起動させた場合、以下の画像の様な表示が出る可能性があります。その場合は「アクセスを許可する」をクリックしますが、この時許可する通信をプライベートネットワークのみにチェックを入れ、パブリックネットワークのチェックは外しましょう。あくまでローカルでのテスト用なので外とつなぐ必要性はありませんので。

DLLファイルがない

環境によってはVCなんとか.dllがファイルが云々というメッセージが出る場合があります。この場合、Microsoft Visual C++ 再頒布可能パッケージがインストールされていません。複数バージョンがあるのでどれが必要か分からないという場合は、足りないファイル名のVCの後ろの数字を確認して15(PHP7.2)であればVisual Studio 2017用を、14(PHP7.1及び7.0)であれば2015用を、11(PHP5.6)であれば2012用の再頒布可能パッケージをインストールしましょう。また、PHPのダウンロードページにてx86と書かれたファイルをダウンロードしたならば(このページでダウンロードしたのはこちら)x86と書かれた方を、x64と書かれたファイルをダウンロードしたならばx64と書かれた方をインストールする必要があります。