XAMPP使わないでWindowsに Apache 2.4 + PHP 7.3 環境を作ってみる
ちょっと環境配布したりするのにXAMPPは重いので、最低限必要なものだけで作ってみました。
※PHPはモジュールモードで動かします。Apacheの自動起動設定 (サービス登録) はしません。
環境置き場を決める
最初に、環境置き場にするフォルダを作っておきます。この記事では C:\myenv
とします。
このあとApacheの設定ファイル内にこのパスを書くことになるので、後から変えたくなるような場所 (デスクトップに適当にみたいな) にはしないほうがいいです。
Apacheをダウンロード
Apacheのバイナリを用意します。注意点として、Apache公式サイトではWindows用のバイナリは配布されてません。ソースコード配布してるから自分でビルドしてくれ、ということです。
でも自分でビルドするのは大変なので、サードパーティベンダーが配布してくれてるバイナリを貰ってくるのが簡単です。この記事では、Apache公式のダウンロードページで紹介されてるApache Loungeからバイナリを貰ってきます。
以下ページにアクセスし、『Apache 2.4.39 Win64』のところにある httpd-2.4.39-win64-VS16.zip
をダウンロードします。
Apache VS16 binaries and modules download
ダウンロードしたらzipを解凍し、出てきた httpd-2.4.39-win64-VS16
フォルダを C:\myenv
の下に移動します。httpd-2.4.39-win64-VS16
フォルダの下に Apache24
フォルダとかがあればOKです。
Apacheの初期設定
Apacheの設定ファイル httpd.conf
を書き換えます。ここまで手順通りにやってれば、C:\myenv\httpd-2.4.39-win64-VS16\Apache24\conf\httpd.conf
にあるはずです。
SRVROOT設定
まず、37行目付近にある Define SRVROOT
の値を以下の通りに変更します。これを設定すると、このApacheは C:\myenv\httpd-2.4.39-win64-VS16\Apache24
以下で動くようになります。
ServerName設定
220行目付近のコメントアウトされた ServerName www.example.com:80
を有効化して、ServerName
の値を localhost:80
に変更します。
これは (少なくともこの記事の通りに構築する限りなら) 設定しなくても一応動きますが、設定しないとApache起動時に AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using ::1. Set the 'ServerName' directive globally to suppress this message
というエラーメッセージが表示されて気持ち悪いです。設定しておきましょう。
.htaccess有効化
せっかくだから .htaccess
が使えるようにします。
273行目付近、場所で言うと <Directory "${SRVROOT}/htdocs">
ディレクティブ内の AllowOverride
を All
に変更します。
mod_rewrite有効化
私は .htaccess
をURLのリライトに使うと思うので、mod_rewrite
を有効化します。使わないなら飛ばしてOKですが、たぶん使うのでやったほうがいいです。
162行目付近、LoadModule
がたくさん並んでるところで mod_rewrite
の行を探して、コメントアウト解除します。
全部設定できたら httpd.conf
を上書き保存します。
Apache動かしてみる
試しにここまでの設定でApacheを動かしてみます。
コマンドプロンプトを開いて以下の通りに入力して実行すると、Apacheが起動します。以後、コマンドプロンプトは入力を受け付けなくなるので、終了したくなったら Ctrl+C でApacheを止めるか、×ボタンで閉じます。
なお、初回は「このアプリの機能のいくつかが Windows Defender ファイアウォールでブロックされています」ダイアログが表示されます。ここでは『プライベートネットワーク』のチェックをONにして『アクセスを許可する』ボタンを押し、Apacheに通信を許可します。
Apacheを起動させたら、ブラウザで http://localhost/index.html
にアクセスします。すると、以下のように「It works!」とだけ書かれた画面が出てくるはずです。
この画面のソースコードは C:\myenv\httpd-2.4.39-win64-VS16\Apache24\htdocs\index.html
です。Apacheの初期設定では、SRVROOT
以下の htdocs
フォルダがドキュメントルートになってます。http://localhost
には、ドキュメントルート以下に置いたものが表示されます。
ここまで確認できたら、Apacheは Ctrl+C で止めておきます。(止まるまでに少し時間がかかる場合があります。)
PHPをダウンロード
Windows版PHPのバイナリを用意します。以下ページにアクセスし、『VC15 x64 Thread Safe』のzipをダウンロードします。(なお、このページには PHP公式サイト の Downloads → Windows downloads から行けます。)
PHP For Windows: Binaries and sources Releases
ダウンロードしたらzipを解凍し、出てきた php-7.3.8-Win32-VC15-x64
フォルダを C:\myenv
の下に移動します。C:\myenv\php-7.3.8-Win32-VC15-x64
以下に ext
フォルダとか php.exe
があればOKです。
ここまでで、C:\myenv
には httpd-2.4.39-win64-VS16
フォルダと php-7.3.8-Win32-VC15-x64
フォルダがある状態になってます。
PHPにはNon Thread Safe版とThread Safe版がありますが、ここでThread Safe版を選んだ理由は、Windows版ApacheのMPMがWinNTだからです。
WinNTは、リクエストが複数来たときにスレッドを増やして処理します。なのでPHPも、スレッドセーフ (=複数スレッドで動くことを考慮して作られてる) な方を選ぶのが適切なはずです。
ここらへんの話は以下の記事が大変参考になりました。
PHPのスレッドセーフ版(TS)とノンスレッドセーフ版(NTS)の違い | Dr.Clover's Computer Clinic
Apache2系のMPMについてまとめた - めもめも のーと
PHPの初期設定
PHPの設定ファイル php.ini
を書き換えます。
が、このファイルは初期状態では存在しません。なので C:\myenv\php-7.3.8-Win32-VC15-x64\php.ini-development
を同じフォルダ内にコピーして増やし、ファイル名を php.ini
に変更することで作成します。
ファイルを用意できたら、php.ini
の951行目付近の date.timezone
先頭のセミコロンを外して、タイムゾーンに Asia/Tokyo
を設定します。これで、PHP内で時刻を日本時間として扱えるようになります。
変更したら php.ini
を上書き保存します。
Apacheの上でPHPが動くようにする
Apacheの上でPHPが動くように、Apacheに設定を追加します。
httpd.conf
にベタッと追記してもいいのですが、Apacheには追加の設定ファイル置き場 C:\myenv\httpd-2.4.39-win64-VS16\Apache24\conf\extra
があるので、今回はそこにPHP用の新しい設定ファイルを作ります。
名前は httpd-php.conf
とし、内容は以下の通りにします。
httpd-php.conf
を作成したら、それを読み込めるように httpd.conf
の末尾に以下を追記します。この作業を忘れると動きません。
Apacheの上でPHP動かしてみる
Apacheの htdocs
以下にPHPのページ test.php
を作って、それを表示してみます。
C:\myenv\httpd-2.4.39-win64-VS16\Apache24\htdocs\test.php
ファイルを作成し、中身は以下の通りにします。この時、ファイルの文字コードは必ずUTF-8で保存してください。
そしたらまたApache起動して、今度はブラウザで http://localhost/test.php
にアクセスします。すると、以下のように現在日時だけが表示された画面が出てくるはずです。
もしここでソースコードがそのまま表示されてたら、どこか設定が間違ってます。確認して直してください。
ちゃんと動いたら終わりです。動かすために毎回Apache起動しなきゃいけないのがダルくなってきたら、「windows apache サービス 登録」とかでググってください。以上です。