こうこく
作 ▸
改 ▸

XAMPP使わないでWindowsに Apache 2.4 + PHP 7.3 環境を作ってみる

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

Windows 10 (64bit)Apache 2.4.39 (64bit)PHP 7.3.7 (64bit)
もくじ

※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 以下で動くようになります。

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

ServerName設定

220行目付近のコメントアウトされた ServerName www.example.com:80 を有効化して、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 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"> ディレクティブ内の AllowOverrideAll に変更します。

httpd.conf (273行目付近)
<Directory "${SRVROOT}/htdocs">
    # ※省略

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    # ※省略
</Directory>

mod_rewrite有効化

私は .htaccess をURLのリライトに使うと思うので、mod_rewrite を有効化します。使わないなら飛ばしてOKですが、たぶん使うのでやったほうがいいです。

162行目付近、LoadModule がたくさん並んでるところで mod_rewrite の行を探して、コメントアウト解除します。

httpd.conf (162行目付近)
LoadModule rewrite_module modules/mod_rewrite.so

全部設定できたら 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 から行けます。)

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 フォルダがある状態になってます。

C:\myenv
C:\myenv


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 (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 '<?php'; ?>

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

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

現在日時
現在日時

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

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

この記事に何かあればこちらまで (非公開)