PHP5.2と5.3を共存させるまでの道のり
前提
・CentOS5.3でApache2.3.3(たしか)
・元々PHP 5.2.13が入っている
・そこにPHP5.3.3もご一緒したい
・5.2はApache Handlerで、5.3はfastCGIで
・バーチャルホストで動かしているmoge.com内は5.2で、hoge.comは5.3で動かしていこうと思う
やっていこう
なんかすごくエラーがたくさん出て困ったけど、なんとかインストールできた。やっぱり困ったらgoogle先生と相談して頑張るのが一番。
時にはしくじる事もある、ちょっぴり悲しい事もある、だけど、なんとかなる。
今回本当に好き…と思ったサイトは
Multiple PHP versions on one webserver
(http://blog.dynom.nl/archives/Multiple-PHP-versions-on-one-webserver_20091103_53.html)
FastCGI+Apache インストールメモ
(http://www.softel.co.jp/blogs/tech/archives/2100)
の2ヶ所でございます。本当にありがとうございました。
そうそうfastCGIのインストールもしたんだけど、そのへんは参考サイトさんが既に完璧だから書きません。
1. PHP5.3.3をインストール
最終的に使ったconfigureのオプションはこれ。cgiとして使う場合は「-with-apxs2」を入れないように気をつけましょう。
これ入れてconfigureするとphp-cgiができないみたいです。ハマりどころですな。
./configure \ --prefix=/php-5.3.3 \ //ここはPHP5.3を入れたい場所 --mandir=/php-5.3.3/share/man \ //このへんもよきに計らう --infodir=/php-5.3.3/share/info \ //このへんもよきに計らう --with-config-file-path=/php-5.3.3/etc/php5 \ //config fileのパス。多分後からphp.iniで直せる --with-config-file-scan-dir=/php-5.3.3/var/db/php5 \ //config_file_scan_dirのパス。多分後からphp.iniで直せる --enable-bcmath \ --enable-ctype \ --enable-dom \ --enable-filter \ --enable-hash \ --enable-json \ --enable-libxml \ --enable-mbstring \ --enable-pdo \ --enable-session \ --enable-simplexml \ --enable-tokenizer \ --enable-xml \ --enable-xmlreader \ --enable-xmlwriter \ --with-bz2=/usr/include \ --with-gd=/usr/include \ --with-mcrypt=/usr/include \ --with-mhash=/usr/include \ --with-mysql=/usr/bin/mysql \ --with-pcre-regex=/usr/local \ --with-readline=/usr/include \ --with-libxml-dir=/usr/include \ --with-zlib=/usr/local \ --with-ldap=/usr \ --with-iconv=/usr/local \ ※エラー出たから追加した --with-freetype-dir=/usr/include/freetype2/freetype \ --with-pdo-mysql=/usr/bin/mysql ※ここも色々エラーが出た。mysqlの場所とかはwhichしたりfindしたりそれぞれ頑張るように
- 途中出たエラー
・エラーその1「libiconvがない」
☆解決策…libiconvを入れてリンクパスを通す
# mkdir -p /usr/local/src/libiconv # cd /usr/local/src/libiconv # wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.10.tar.gz //貰ってくる場所やバージョンはお好みで # wget http://www2d.biglobe.ne.jp/~msyk/software/libiconv/libiconv-1.10-ja-1.patch.gz //色々あってパッチを当ててます # tar xzf libiconv-1.10.tar.gz # cd libiconv-1.10 # gzip -dc ../libiconv-1.10-ja-1.patch.gz | patch -p1 # ./configure # make # make install # echo 'include /usr/local/lib/liconv.so' >> /etc/ld.so.conf # /sbin/ldconfig
で、--with-iconv=/usr/localを追加した次第
・エラーその2 「/usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status」
☆解決策…lltdlがありませんよ、みたいに言われたが、そんなはずはないのでとりあえず探す。
# find / -name 'libltdl'
ってやって探して出てきた場所に移動し、とりあえずconfigureしてmakeしてみる
# cd /usr/share/libtool/libltdl # ./configure --enable-ltdl-install # make # make install
いたけど入ってなかったって事?よくわからないけど無事入った。
2. PHP5.3.3が入ったら
色々とエラーを解消しつつ、無事PHP5.3.3が入ったら
Wrote PEAR system config file at: /php-5.3.3/etc/pear.conf You may want to add: /php-5.3.3/lib/php to your php.ini include_path /root/php-5.3.3/build/shtool install -c ext/phar/phar.phar /php-5.3.3/bin ln -s -f /php-5.3.3/bin/phar.phar /php-5.3.3/bin/phar Installing PDO headers: /php-5.3.3/include/php/ext/pdo/
っていうメッセージが出てたのでメッセージに従う
- php.iniに追加
php.iniのinclude_pathに/php-5.3.3/lib/php追加
include_path = ".:/php/includes:/php-5.3.3/lib/php"
- shtoolインストールからのシンボリックリンク作成
# /root/php-5.3.3/build/shtool install -c ext/phar/phar.phar /php-5.3.3/bin # ln -s -f /php-5.3.3/bin/phar.phar /php-5.3.3/bin/phar
- httpd.conf変更
FcgidInitialEnv PHPRC "/php-5.3.3/lib/"
を追加
そしてhoge.comのvirtualhost内にいくつか足す
<VirtualHost *:80> DocumentRoot "/var/www/hoge" ServerName hoge.com AddType text/html .php DirectoryIndex index.php index.html AddHandler fcgid-script .php #ここと FcgidWrapper "/php-5.3.3/bin/php-cgi" .php #ここを足した <Directory "/var/www/hoge"> Options -Indexes FollowSymLinks ExecCGI #CGIが実行できるようにしておく AllowOverride all Order allow,deny Allow from all </Directory> </virtualHost>
を追記。5.2の方はAddHandlerしてるphpで動いているのでそのへんは何もしなくていいはず。そしたら
mod_fcgid: can't apply process slot for /php-5.3.3/bin/php-cgi
とエラーが。色々調べて
# chmod 755 /var/log/httpd/
ってやったら動いた
3. 追加した方のPHPにpeclでライブラリとか入れていく
# /php-5.3.3/bin/pecl install imagick
って感じで、新しいPHPを追加した場所のpeclを使うのを忘れずにね!
普通に
# pecl install imagick
とかやっても元々入ってたPHPに入っていくばかりです。pearもね。
無事入ったら5.3の方のphp.ini内でextension=imagick.soを追加するよ。
場所がわからなかったらphpinfoで読み込んでいるphp.iniを確認しよう。
extension_dirとか大概のものが確認できる。便利だ。
php.iniの変更自体はできてるのに、追加したextensionだけはなぜかphpinfoで出てこないよっていう時は大抵入ってないよ
findで見つけたimagick.soをphp5.3のextension_dir内にコピーして読み込んで「動かねぇ!」とかやってたけど
よく考えたらpeclもPHPごとにあるんだよねって事でインストールしたら動きましたよ。
入っているかどうかをコマンドラインからお手軽に確認したい時は
/php-5.3.3/bin/php -i |grep imagick
とかで確認してみようね。
【おまけ】 pcreが入ってるのに「Compilation failed: this version of PCRE is not compiled with PCRE_UTF8 support」
phpinfoで確認したらpcreはenabled。そうです入ってる事は入ってるんです。
でもPCREがUTF-8をサポートしてないよーっていうことで確認
# pcretest -C PCRE version 8.20 2011-10-21 Compiled with No UTF-8 support No Unicode properties support No just-in-time compiler support Newline sequence is LF \R matches all Unicode newlines Internal link size = 2 POSIX malloc threshold = 10 Default match limit = 10000000 Default recursion depth limit = 10000000 Match recursion uses stack
UTF-8をサポートしていないですね。
という訳でpcre-8.20は手動で入れてあったので、再インストールします
# cd pcre-8.20 # ./configure --enable-utf8 # make # make install
これでもう一度確認
]# pcretest -C PCRE version 8.20 2011-10-21 Compiled with UTF-8 support No Unicode properties support No just-in-time compiler support Newline sequence is LF \R matches all Unicode newlines Internal link size = 2 POSIX malloc threshold = 10 Default match limit = 10000000 Default recursion depth limit = 10000000 Match recursion uses stack
入りました。pcreが動きましたね。ところでPCREって「Perl Compatible Regular Expressions」の略なんですけど
パっと見なんか「PreCuRE」って感じに見えるんですよね。不思議ですね。今週は黄瀬やよいさんのじゃんけんに勝ちました。