PHP4とPHP5を1つのサーバに共存

httpdを2つ起動させる必要がある。
1.PHP4、PHP5をまず別々の場所にインストール(ソースからコンパイルする。オプションに–prefix=/usr/local/php4を入れればOK)
2.httpdを二つ動作させる。
2-1./etc/httpd配下を/etc/httpd-php4などとして、コピー。
2-2.コピー後、logsディレクトリのみシンボリックリンクを張り替え、新しいディレクトリを指すようにする。
2-3.httpd.confのportを開いているポートに変更する
/etc/httpd-php4/conf/httpd.conf内を
PidFile run/httpd-php4.pid
ServerRoot “/etc/httpd-php4
と書き換える。
念のため
#ServerName 192.168.1.xx:80
としておく。
※メインにするhttpd.confと、サブのhttpd.confのポートは必ず違うものを指すようにすること。
2-4. php.confをマスターhttdとサブhttpdでそれぞれPHP4とPHP5が実行できるように以下のように設定する。
※ソースからコンパイルした場合はhttpd.conf内に以下を記述することになる。
○マスターhttpdのphp.conf

[php]
LoadModule php5_module             /usr/lib/httpd/modules/libphp5.so
AddType application/x-httpd-php        .php
DirectoryIndex index.php
[/php]

○サブhttpdのphp.conf

[php]
LoadModule php4_module             /usr/lib/httpd/modules/libphp4.so
AddType application/x-httpd-php        .php
DirectoryIndex index.php
[/php]

2-5./etc/sysconfigに以下を追記。

[php]
OPTIONS=”-d /etc/httpd-php4 -D HTTPD_ROOT=/etc/httpd-php4 -D DEFAULT_PIDLOG=logs/httpd-php4.pid”
[/php]

2-6.起動スクリプトのコピーを下記の対応でファイル修正。
次にディレクトリ/etc/init,dの起動スクリプトhttpdをhttpd-php4というファイル名にし,下記の対応でファイルを修正します.
・/etc/init.d/httpdの内容
・/etc/init.d/httpd-phpの変更点
# config: /etc/httpd/conf/httpd.conf
# config: /etc/httpd-php4/conf/httpd.conf
# config: /etc/sysconfig/httpd
# config: /etc/sysconfig/httpd-php4
# pidfile: /var/run/httpd.pid
# pidfile: /var/run/httpd-php4.pid
if [ -f /etc/sysconfig/httpd ]; then
if [ -f /etc/sysconfig/httpd-php4 ]; then
. /etc/sysconfig/httpd
. /etc/sysconfig/httpd-php4
httpd=${HTTPD-/usr/sbin/haruta}
httpd=${HTTPD-/usr/sbin/httpd-php4}
prog=haruta
prog=httpd-php4
pidfile=${PIDFILE-/var/run/httpd.pid}
pidfile=${PIDFILE-/var/run/httpd-php4.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}  lockfile=${LOCKFILE-/var/lock/subsys/httpd-php4}
2-7.修正完了後chkconfigコマンドでシステムに登録。

[php]
/bin/chkconfig –add httpd-php4
[/php]

2-8.次にhttpd自身のコピーです.Fedora Coreではhttpdはディレクトリ/usr/sbinに存在するので,
httpdをhttpd-php4というファイル名にコピーする。※参考ページではシンボリックリンクを使用しているが、
それだとhttpdプロセスをstopした時に不具合が生じるためコピーにした。

[php]
cd /usr/sbin
cp -p httpd httpd-php4
cp -p httpd haruta
[/php]

2-9.httpd-php4の起動ができることを確認。

[php]
/etc/init.d/httpd-php4 start
[/php]

3.設定を変更したらhttpd-php4に設定ファイルを再読み込み。

[php]
/etc/init.d/httpd-php4 restart
[/php]

これであたかも「通常はPHP4を実行し,/php5以下のみPHP5が実行されるサーバ」が出来上がる。
なお、リバースプロキシの設定はポートでPHP4とPHP5を使い分けれるので設定しない。
※# /etc/init.d/httpd-php4 restart実行時、can not load~libphp4などとエラーが出てアパッチが上がらない場合は
PHPをもう一度リコンパイルする事で解決した。
※あとは、適宜足りないものがあればphpizeで入れていくか、リコンパイルする。
443ポート(SSLポート)がすでに存在しているというエラーが出た場合は以下をコメント扱いにすればOK。
(/etc/httpd-php4/conf/htpd.conf)
#Include conf.d/*.conf
Starting httpd: Syntax error on line 191 of /etc/httpd/conf/httpd.conf:
Cannot load /usr/lib64/httpd/modules/libphp5.so into server: /usr/lib64/httpd/modules/libphp5.so: undefined symbol: php_ob_gzhandler_check
というエラーのときはPHPを最初から入れなおせばOK。