CentOS5.5のPHPを最新版にアップグレードする

CentOSが他のディストリビューションに比べて一番ダメダメなところは、RPMのレポジトリに登録されている各種ライブラリのバージョンがとにかく古いことなんだな(´・ω・`)


PHPが5.1.6と古いのでバージョンアップすることにした。
ググルとぁゃしぃutterなんちゃらとかremiなんちゃらとかのレポジトリをrpm importして使え!といっているサイトもありますがぁゃしぃものは信じない主義なので自分でソースからインスコする。


PHPをソースからインスコするときは、libxml2, apache-apxs2, libmysqlclientに依存するのでこれらを先に入れる。


libxml2の開発パッケージをインストール。

# cd /usr/local/src/ (自分でいれたソースコードはここに集める主義)
# yum install libxml2
# yum install libxml2-devel

確認。

# whereis libxml2
libxml2: /usr/local/lib/libxml2.a /usr/local/lib/libxml2.la /usr/local/lib/libxml2.so

apxs2を先にインストールしておく。これはhttp-develパッケージに入っている。

# yum install httpd-devel
# whereis apxs
apxs: /usr/sbin/apxs /usr/share/man/man8/apxs.8.gz
(パスを通しておく)
# export PATH=$PATH:/usr/sbin/

libmysqlclientはmysql-develパッケージに入ってる。

# yum install mysql-devel


事前にRPM版のPHP5.1.6を削除。

# yum erase php\*

PHPのソース最新版をphp.netからダウンロードしてきてインストール。

# tar xvjf php-5.3.6.tar.bz2
# cd php-5.3.6/
# make clean (念のため)
# export LDFLAGS="-L/usr/lib64/mysql" (64bit版の場合)
# ./configure --prefix=/usr --with-apxs2=/usr/sbin/apxs --enable-mbstring --enable-mbregex --with-mysql --with-mysql-sock=/var/lib/mysql/mysql.sock --with-pdo-mysql --enable-zend-multibyte --with-zlib-dir=/usr/lib --with-config-file-path=/etc/

    • with-config-file-pathを指定しないときのデフォルトパスは /usr/local/lib/php.ini となるので注意。CentOSのデフォルトでは/etc/php.iniになっているので合わせる。
    • apxs2のパスはwhereis apxsとするとわかる。
    • prefixのパスはまつびに/を付けない。with-config-fileのパスは最後に/を付ける点に注意。

pearとかは特に--disable-pearとかしない限り自動的に入るので大丈夫。

# make
# make install

php.iniをコピー。

# cp php.ini-production /etc/php.ini
# ln -s /etc/php.ini /usr/local/lib/php.ini

ソースからインストールしたphp.iniは以下の3箇所を修正する必要があるので注意。

  1. display_errors = Off に変更 (デフォルトでOnになっている)
  2. short_open_tag = On に変更 (あまり推奨されてないけど、<?=$var?>形式が使えないといくつかのオープンソースは正しく動作しないので。)
  3. date.timezone = Asia/Tokyo を追加。(ないとWarningが出まくる)

あとはお好みで。

インストール結果は次のようにして確認&保存しておくと後で便利。

# php --info > phpinfo.txt

Apache再起動。

# /sbin/service httpd restart