ちょっと環境配布したりするのにXAMPPは重いので、最低限必要なものだけで作ってみました。

[ Windows 10 (64bit) / Apache 2.4.39 (64bit) / PHP 7.3.7 (64bit) ]

※PHPはモジュールモードで動かします。Apacheの自動起動設定 (サービス登録) はしません。

  1. 環境置き場を決める
  2. Apacheをダウンロード
  3. Apacheの初期設定
  4. Apache動かしてみる
  5. PHPをダウンロード
  6. PHPの初期設定
  7. Apache上でPHPが動くようにする
  8. Apacheの上でPHP動かしてみる

環境置き場を決める

最初に、環境置き場にするフォルダを作っておきます。この記事では C:\myenv とします。

このあとApacheの設定ファイル内にこのパスを書くことになるので、後から変えたくなるような場所 (デスクトップに適当にみたいな) にはしないほうがいいです。

Apacheをダウンロード

Apacheのバイナリを用意します。注意点として、Apache公式サイトではWindows用のバイナリは配布されてません。ソースコード配布してるから自分でビルドしてくれ、ということです。

でも自分でビルドするのは大変なので、サードパーティベンダーが配布してくれてるバイナリを貰ってくるのが簡単です。この記事では、Apache公式のダウンロードページで紹介されてるApache Loungeからバイナリを貰ってきます。

以下ページにアクセスし、『Apache 2.4.39 Win64』のところにある httpd-2.4.39-win64-VS16.zip をダウンロードします。

ダウンロードしたら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 にあるはずです。

まず、37行目付近にある Define SRVROOT の値を以下の通りに変更します。これを設定すると、このApacheは C:\myenv\httpd-2.4.39-win64-VS16\Apache24 以下で動くようになります。

httpd.conf (37行目付近)
Define SRVROOT "C:\myenv\httpd-2.4.39-win64-VS16\Apache24"

次に、220行目付近に ServerName localhost:80 の行を追加します。だいたいどこでもいいと思うのですが、もともとサンプルが書かれているのでここらへんが分かりやすいです。

httpd.conf (220行目付近)
#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#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 というエラーメッセージが表示されて気持ち悪いです。設定しておきましょう。

変更したら httpd.conf を上書き保存します。

Apache動かしてみる

試しにここまでの設定でApacheを動かしてみます。

コマンドプロンプトを開いて以下の通りに入力して実行すると、Apacheが起動します。以後、コマンドプロンプトは入力を受け付けなくなるので、終了したくなったら Ctrl+C でApacheを止めるか、×ボタンで閉じます。

C:\myenv\httpd-2.4.39-win64-VS16\Apache24\bin\httpd

なお、初回は「このアプリの機能のいくつかが Windows Defender ファイアウォールでブロックされています」ダイアログが表示されます。ここでは『プライベートネットワーク』のチェックをONにして『アクセスを許可する』ボタンを押し、Apacheに通信を許可します。

アクセスを許可する
アクセスを許可する

Apacheを起動させたら、ブラウザで http://localhost/index.html にアクセスします。すると、以下のように「It works!」とだけ書かれた画面が出てくるはずです。

It works!
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 から行けます。)

ダウンロードしたら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 フォルダがある状態になってます。

C:\myenv
C:\myenv

PHPにはNon Thread Safe版とThread Safe版がありますが、ここでThread Safe版を選んだ理由は、Windows版ApacheのMPMがWinNTだからです。

WinNTは、リクエストが複数来たときにスレッドを増やして処理します。なのでPHPも、スレッドセーフ (=複数スレッドで動くことを考慮して作られてる) な方を選ぶのが適切なはずです。

ここらへんの話は以下の記事が大変参考になりました。

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 (951行目付近)
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Tokyo

変更したら 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
# PHPモジュール読み込み
LoadFile "C:\myenv\php-7.3.8-Win32-VC15-x64\php7ts.dll"
LoadModule php7_module "C:\myenv\php-7.3.8-Win32-VC15-x64\php7apache2_4.dll"

# 拡張子が "php" のファイルをPHPとして扱う
<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>

# PHPの設定ファイル (php.ini) の場所を指定する
<IfModule php7_module>
    PHPINIDir "C:\myenv\php-7.3.8-Win32-VC15-x64"
</IfModule>

httpd-php.conf を作成したら、それを読み込めるように httpd.conf の末尾に以下を追記します。この作業を忘れると動きません。

httpd.conf
Include conf/extra/httpd-php.conf

Apacheの上でPHP動かしてみる

Apacheの htdocs 以下にPHPのページ test.php を作って、それを表示してみます。

C:\myenv\httpd-2.4.39-win64-VS16\Apache24\htdocs\test.php ファイルを作成し、中身は以下の通りにします。この時、ファイルの文字コードは必ずUTF-8で保存してください。

test.php
<?php
	echo '現在日時 = '.date('Y-m-d H:i:s');

そしたらまたApache起動して、今度はブラウザで http://localhost/test.php にアクセスします。すると、以下のように現在日時だけが表示された画面が出てくるはずです。

現在日時
現在日時

もしここでソースコードがそのまま表示されてたら、どこか設定が間違ってます。確認して直してください。

ちゃんと動いたら終わりです。動かすために毎回Apache起動しなきゃいけないのがダルくなってきたら、「windows apache サービス 登録」とかでググってください。以上です。