同一apache内でモジュール版phpとcgi版phpを共存させる
apache版モジュールのphpを動かしつつ、
特定のディレクトリではcgi版の別のphpを動かす設定。
apache2.22 の場合だけど、2系ならたぶん同じような感じじゃないかな。
apacheモジュール版php
yum
でも apt-get
でも brew
でもいいからとりあえずパッケージ入れたらモジュール版になると思う。
ソースからビルドしたければ以下のオプションつける。
./configure --with-apxs2
で、ビルドしてインストール。make && make install
これでapache内で特に指定しない場合のphpはこれで動くようになるはず。
cgi版php
phpのビルド
適宜読み替えてください。
ex) php-5.3.28 をソースから入れる場合。
とりあえずソースは /usr/local/src/php-5.3.28
に置くとして、
インストールディレクトリも分けておきたい。
そのために最低限必要なオプションはこんな感じ。
./configure \
--prefix=/usr/local/lib/php-5.3.28 \
--with-config-file-path=/usr/local/lib/php-5.3.28
--with-config-file-path
でphp.ini
を読みにいく場所も指定しておくとよさげ。
で、ビルドしてインストール。make && make install
apacheの設定
cgi版phpの準備
apacheのconfで
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
ってなってる場合。
デフォルトだと ScriptAlias
で指定してある場所でないとcgi動かないので、
そちらにcgi版phpをコピーする。
cp /usr/local/lib/php-5.3.28/bin/php-cgi /usr/local/apache2/cgi-bin/php53-cgi
cgi-binの設定が
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
+ Options +FollowSymLinks
Order allow,deny
Allow from all
</Directory>
とかシンボリックリンク辿る設定になってれば、シンボリックリンクでもいい。
confの設定
最後に、phpを特定のcgi版で動かしたい場合のconfの設定。
<Directory /Users/local/apache2/htdocs/php53>
Options Indexes FollowSymLinks
AllowOverride All
+ Action php53 /cgi-bin/php53-cgi
+ AddHandler php53 .php
Order allow,deny
Allow from all
</Directory>
もしくは
<VirtualHost *:80>
DocumentRoot "/Users/local/apache2/htdocs"
+ Action php53 /cgi-bin/php53-cgi
+ AddHandler php53 .php
</VirtualHost>
VirtualHost
ディレクティブにもDirectory
ディレクティブにも書けるので、お好きなように。
Action php53 /cgi-bin/php53-cgi
でphp53
って名前のActionを定義して、
AddHandler php53 .php
で拡張子を関連づける。
ここで書いた設定はモジュール版phpよりも優先される。
他にも同居するバージョン増やしたければ同じやり方でおk。
追記@2014/04/21
ソースから入れたphpにエクステンションを入れる場合の例
peclの場合
各バージョンのphpにpecl付属してるので、これでおk。
/usr/local/lib/php-5.3.28/bin/pecl install redis
ソースから入れる場合
phpize
と./configure
に一手間必要なのでちょっとめんどくさい。
cd /usr/local/src/memcached-2.0.0b2
/usr/local/lib/php-5.3.28/bin/phpize
./configure --with-php-config=/usr/local/lib/php-5.3.28/bin/php-config