目次

PHP7.2 Apache2の設定 

Version 7.2.22 — y2sunlight 2019-10-17
Version 7.3.15 — y2sunlight 2020-03-06

PHP7.2をPHP7.3と読み替えても内容は同じです

PHPに戻る

関連記事


概要

本編ではローカル環境にPHPスクリプトのテスト環境を構築しています。XAMPPを使ってphpをインストールする場合は、phpに関する設定をする必要はありませんが、phpの設定が「どこで、どうして行われているか」については知っておくべきです。また、設定ファイル等の存在場所はXAMPPの設定に従います。

以下では、PHP7.2をApache2拡張モジュール(php7_module)またはCGIの何れかで使用するためのApache2の設定について説明します。Apacheの基本設定については「Apache2.4 httpd.confの編集」を参照して下さい。

Apache2のphp関連の設定ファイル

XAMPPを使ったインストールでは、Apache2のphp関連の設定は以下のファイルで行われています:

{XAMPP Install folder}\apache\conf\extra\httpd-xampp.conf

Apache2のphpの設定を変更する場合は、このファイル(httpd-xampp.conf)を変更するのが良いと思います。


Apache2拡張モジュールとしてのPHP7の設置

httpd-xampp.conf
#
# PHP-Module setup
#
LoadFile "D:/usr/xampp7.2.22/php/php7ts.dll"
LoadFile "D:/usr/xampp7.2.22/php/libpq.dll"
LoadModule php7_module "D:/usr/xampp7.2.8/php/php7apache2_4.dll"
 
<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
</FilesMatch>

ここでは、LoadFileLoadModule によってphp7で必要な3つのファイル(php7ts.dll、libpq.dll、php7apache2_4.dll)をロードし、SetHandlerによって拡張子がphpのファイルに対するWebサーバーの処理を特定のハンドラ(application/x-httpd-php)に委譲しています。

スレッドセーフ

PHPにはマルチスレッド環境で安全に動作することを意図した実装( ZTS 版 ) とそうでない実装( NTS 版 )が存在します。マルチスレッド環境で安全に動くようなプログラムのことを「スレッドセーフ(Thread Safe)」と呼びます。ZTS とは、Zend Thread Safe の、NTS は Non Thread Safe の略です。本編で使用しているXAMPPに同封されているPHPは ZTS 版 (スレッドセーフ)です。

ZTS 版も NTS 版もそれ単体では、どちらでも同じように動作し、通常は意識する必要はありませんが、PHP拡張モジュールをインストール場合には、どちらで動いているかを調べる必要があります。これは以下のコマンド( php -i )で調べる事ができます:

> php -i | find "Thread"

Thread Safety => enabled
Thread API => Windows Threads

また、Winodwsバイナリとして配布されているPHP7ではDLLの名前がスレッドセーフか否かによって異なっています。

PHPの公式配布サイト

但し、いわゆる野良ビルト(一般ユーザーが独自にビルドを行って配布しているパッケージ)のDLLでは、ファイル名前からスレッドセーフか否かを判断することはできません。


CGIとしてのPHP7の設置

httpd-xampp.conf
#
# PHP-CGI setup
#
#<FilesMatch "\.php$">
#    SetHandler application/x-httpd-php-cgi
#</FilesMatch>
#<IfModule actions_module>
#    Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
#</IfModule>

ここでは、SetHandlerによって拡張子がphpのファイルに対するWebサーバーの処理を特定のハンドラ(application/x-httpd-php-cgi)に委譲し、ActionによってそのハンドラのリクエストをCGIスクリプト(/php-cgi/php-cgi.exe)が実行することを指定しています。CGIスクリプトのパスの部分(/php-cgi/)については ScriptAliasによって指定されています。

尚、php7をCGIで起動するには、上の設定のコメントを解除して、「Apache2拡張モジュールとしてのphp7の設置」の方をコメントにすることで行えます。


設定の確認

XAMPPでは以下のURLでphpinfo()を動かすことができます:

上のURLを実行してphp7をApache2拡張モジュール(php7_module)として、またはCGIとして動かした場合のphpinfo() の違いを確認してください。それぞれ以下のように表示されます。

[Server API] Apache 2.0 Handler — (php7_moduleの場合)
[Server API] CGI/FastCGI — (CGIの場合)