apacheでPHPモジュールを切り替えて使う方法

apacheでPHP5.2でテストしたり、PHP5.3でテストしたりしたい場合がある。apache起動時にそれを切り替える方法。

PHPのインストールに関して

コンパイルする際に、--prefixをそれぞれ変える。例えばphp5.2なら --prefix=/usr/local/php52 とし、php5.3なら --prefix=/usr/local/php53 として configure。
インストールでは、modules/libphp5.so としてPHPモジュールがインストールするわけだが、この名前を例えば、libphp5.2.soやlibphp5.3.soに変更しておくこと(configureでモジュール名を変更する方法を探してみたけどわからなかった;_;)。
なのでインストールの順番は、
1. PHP5.2をインストール( --prefix=/usr/local/php52)。
2. modules/libphp5.so を modules/libphp5.2.so に変更。
3. PHP5.3をインストール( --prefix=/usr/local/php53)。
4. modules/libphp5.so を modules/libphp5.3.so に変更。
となる。

apacheの設定ファイルの変更

apacheの設定ファイルhttpd.confにてPHPモジュールをロードするところを以下のように変更する。

<IfDefine PHP53>
       LoadModule php5_module        modules/libphp5.3.so
</IfDefine>
<IfDefine PHP52>
       LoadModule php5_module        modules/libphp5.2.so
</IfDefine>
#LoadModule php5_module        modules/libphp5.so

最後の行は通常PHPをインストールした際に使用するLoadModuleディレクティブ。なのでこれをコメントアウトして、それぞれのバージョンのPHPモジュールのLoadModuleディレクティブをIfDefineディレクティブで囲む。

apacheの起動

  • Dオプションに設定ファイルのIfDefineディレクティブで設定した名前を指定することでどちらかがロードされる。これで切り替えが可能となる。
PHP5.2をロードしたい場合
# /usr/local/apache2/bin/httpd -DPHP52
PHP5.3をロードしたい場合
# /usr/local/apache2/bin/httpd -DPHP53

その他

apacheを停止する(httpd -k stop)とき、設定ファイルで裸でphp_flagディレクティブを使っているとエラーとなり停止できない。その場合も-Dオプションを指定することでエラーにならず停止できるのだが、本来php_flagなどは、以下のように設定ファイルで指定するべき。

<IfModule mod_php5.c>
  php_flag magic_quotes_gpc off
</IfModule>