さすがにphp4系で新規構築はなくなりましたが、
リプレイスでどうしても入れてほしいっていうケースが多々あります。
せっかくなので、php5とphp4を共存させましょうというお話です。
環境:CentOS6
apache2.2(既にインストールされているものとします)
php5はデフォルトのパッケージ版(既にインストールされているものとします)
php4はソースからインストールします
まずは事前に必要そうなパッケージをインストールします。
(本当は事前になんて分からず何度もやり直しですが。。。)
yum -y install httpd-devel bzip2-devel openssl-devel libjpeg-devel libpng-devel gmp-devel ncurses-devel flex gcc make
cd /usr/local/src
php4系の最終リリース4.4.9をダウンロード
wget http://jp2.php.net/get/php-4.4.9.tar.gz/from/this/mirror
tar xvf php-4.4.9.tar.gz
cd php-4.4.9
ここでphp5と共存させるので
MIMEタイプがphp5とかぶらないように変更
vi sapi/apache2handler/sapi_apache2.c
————–
define PHP_MAGIC_TYPE “application/x-httpd-php”
define PHP_SOURCE_MAGIC_TYPE “application/x-httpd-php-source”
define PHP_SCRIPT “php-script”
↓に変更↓
define PHP_MAGIC_TYPE “application/x-httpd-php4″
define PHP_SOURCE_MAGIC_TYPE “application/x-httpd-php4-source”
define PHP_SCRIPT “php4-script”
————–
configureを走らせます
./configure –prefix=/usr/local/php4 –with-apxs2=/usr/sbin/apxs –with-sqlite –with-mysql –with-gd –with-jpeg-dir=/usr –with-png-dir=/usr –with-zlib –with-bz2 –with-openssl –with-gettext –with-gmp –with-iconv –with-ncurses –enable-exif –enable-gd-native-ttf –enable-memory-limit –enable-mbstring –enable-mbstr-enc-trans –enable-mbregex –enable-bcmath –enable-trans-sid –enable-sysvsem –enable-sysvshm
しかし途中で
configure: error: libjpeg.(a|so) not found.
のエラーが、、、
locate libjpeg.so
/usr/lib64/libjpeg.so
/usr/lib64/libjpeg.so.62
/usr/lib64/libjpeg.so.62.0.0
ちゃんとライブラリはあるのに、、、
http://d.hatena.ne.jp/lion_and_perican/20110207/p1
を参考に
–with-libdir=lib64
とかつけてもダメ。。。。
しょうがないので、シンボリックリンクで対応。
ln -s /usr/lib64/libjpeg.so /usr/lib/
ln -s /usr/lib64/libpng.so /usr/lib/
再度、configureを走らせます
./configure –prefix=/usr/local/php4 –with-apxs2=/usr/sbin/apxs –with-sqlite –with-mysql –with-gd –with-jpeg-dir=/usr –with-png-dir=/usr –with-zlib –with-bz2 –with-openssl –with-gettext –with-gmp –with-iconv –with-ncurses –enable-exif –enable-gd-native-ttf –enable-memory-limit –enable-mbstring –enable-mbstr-enc-trans –enable-mbregex –enable-bcmath –enable-trans-sid –enable-sysvsem –enable-sysvshm
今度は成功!
コンパイルへ。
make
make: *** [ext/openssl/openssl.lo] Error 1
エラー。。。
http://www.softel.co.jp/blogs/tech/archives/3777
によると
OpenSSLのライブラリのバージョンが合わないらしく(0.9.8系と1系)、configureできてもmakeのときにエラーとなったりします。
らしいです。
修正版を拝借。
wget http://www.softel.co.jp/blogs/tech/wordpress/wp-content/uploads/2012/10/openssl.c
cp openssl.c ext/openssl/openssl.c
再度コンパイル!
ちょっと豪勢に高めのec2インスタンスを用意したので、
jオプション16!
30秒くらいで終わりました。
ちなみにmicroインスタンスだと10分くらいかかりました・・・
make -j16
無事終了したのでインストール。
make install
インストール時にhttpd.confにモジュールがロードされるのでコメントアウト。
vi /etc/httpd/conf/httpd.conf
——————
LoadModule php4_module /usr/lib64/httpd/modules/libphp4.so
——————
分かりやすいように、/etc/httpd/conf.d/に書き直します。
最初に直したMIMEタイプを指定。
vi /etc/httpd/conf.d/php4.conf
——————
LoadModule php4_module modules/libphp4.so
AddHandler php4-script .php
——————
/etc/init.d/httpd restart
これで、
拡張子をphpで指定するとphp5が動き、
php4と指定するとphp4が動きます。
もちろん、htaccessで切り替える事で、
拡張子がphpのファイルをphp4で動かす事も出来ます!
.htaccess
—————
AddHandler php4-script .php
—————
ちなみにAmazonLinuxだとどうしても
php4とphp5を共存させるとapache起動時に
segmentation faultが発生してしまったので諦めました…orz