Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

同一apache内でモジュール版phpとcgi版phpを共存させる

More than 3 years have passed since last update.

同一apache内でモジュール版phpとcgi版phpを共存させる

apache版モジュールのphpを動かしつつ、
特定のディレクトリではcgi版の別のphpを動かす設定。

apache2.22 の場合だけど、2系ならたぶん同じような感じじゃないかな。

apacheモジュール版php

yum でも apt-get でも brew でもいいからとりあえずパッケージ入れたらモジュール版になると思う。

ソースからビルドしたければ以下のオプションつける。

bash
./configure --with-apxs2 

で、ビルドしてインストール。make && make install

これでapache内で特に指定しない場合のphpはこれで動くようになるはず。

cgi版php

phpのビルド

適宜読み替えてください。

ex) php-5.3.28 をソースから入れる場合。

とりあえずソースは /usr/local/src/php-5.3.28 に置くとして、
インストールディレクトリも分けておきたい。

そのために最低限必要なオプションはこんな感じ。

bash
./configure  \
  --prefix=/usr/local/lib/php-5.3.28  \
  --with-config-file-path=/usr/local/lib/php-5.3.28

--with-config-file-pathphp.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の設定が

httpd.conf
<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
+    Options +FollowSymLinks
    Order allow,deny
    Allow from all
</Directory>

とかシンボリックリンク辿る設定になってれば、シンボリックリンクでもいい。

confの設定

最後に、phpを特定のcgi版で動かしたい場合のconfの設定。

httpd.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>

もしくは

httpd.conf
<VirtualHost *:80>
    DocumentRoot "/Users/local/apache2/htdocs"
+    Action php53 /cgi-bin/php53-cgi
+    AddHandler php53 .php
</VirtualHost>

VirtualHostディレクティブにもDirectoryディレクティブにも書けるので、お好きなように。

Action php53 /cgi-bin/php53-cgiphp53って名前のActionを定義して、
AddHandler php53 .phpで拡張子を関連づける。

ここで書いた設定はモジュール版phpよりも優先される。
他にも同居するバージョン増やしたければ同じやり方でおk。

追記@2014/04/21

ソースから入れたphpにエクステンションを入れる場合の例

peclの場合

各バージョンのphpにpecl付属してるので、これでおk。

bash
/usr/local/lib/php-5.3.28/bin/pecl install redis
ソースから入れる場合

phpize./configureに一手間必要なのでちょっとめんどくさい。

bash
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
arc279
フリーランスだけどわりとどこ行っても「いい感じにする」のに定評があるおっさん
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away