CentOS5.5でPHP5.3を5.2にダウングレードする

記事が長いので、ダウングレードの方法や手順だけ見たい人は途中読み飛ばしてください。方法などの技術的な話ならば、もっと他の詳しい人が書いていたりします。僕にそういう記事よりも有用なものが書けるとも思えません。なので、ダウングレードにいたった経緯とか個人的な考察などを含め、現場で実際に行われていたことを意識しました。


仕事でサーバエンジニアというか、インフラエンジニア的な仕事をしています。それもまだ駆け出しで、まともにサーバをさわりはじめたのは1年くらい前から。それでも最近、なんとかようやく仕事になっているという感じになってきました。


先日もサーバを1台セットアップしました。OSは、CentOS5.5。これはCentOS5.3をインストールしてから、アップグレード(未だにアップグレードとかバージョンアップとか意味の違いがよくわからなくて、使うときに迷う)しました。そして、webサーバ兼メールサーバ的に使うソフトウェアをいろいろ入れました。
プログラムをおくことになり、言語はPHPyumでインストールしたPHPは5.1でした。そこで、新しいことにも挑戦する意味もこめて、PHPのアップグレードをしました。他の理由としては、僕はデータベースエンジニアでもあるので、phpmyadminの最新版を使ってみたかったのですが、それはPHP5.2以上じゃないと対応していないということもありました。四苦八苦してなんとかPHP5.3にアップグレード。その方法はまた別の時にまとめたいと思います。


サーバセットアップをしてから数日後、用意したサーバにプログラムを設置してみると動かない。僕はプログラムを全然かけないので、プログラマーがやりました。しかし、エラーがでまくる。そのプログラムはPHP5.1で動かしていたもので、どうやらPHP5.3にバージョンアップしたことが原因らしい。
本当に僕はプログラムが分からないので、説明は大体受け売りで具体性に欠けてしまうのだけど、簡単にいうと使う変数は最初に定義しないといけなくなったらしいです。PHPというのは、その辺がいい加減というか柔軟なので、PHP5.1までは定義しなかった場合、勝手に定義とか初期化みたいなことをしてくれるという仕様があったみたいです。全然違うこと言ってたら問題なので、その時は誰か教えてください。
ちなみに記録をとるを忘れたのであんまりよくないのだけど、多分下記のようなエラーがたくさんでてたと思います。

Deprecated: Assigning the return value of new by reference is deprecated in

1つ1つ変数の定義をすれば解決するみたいです。しかし、今回は古いフレームワークを使っていて、変数定義の問題がフレームワークにまで及び改善が難しいことと、仕事の納期的にフレームワークを直したり、プログラムを直したりする時間がないことから、PHPのバージョンをさげるという方向で対処することになりました。


ここで問題なのは、前回使っていたPHP5.1に戻すのか、それとも中間のPHP5.2で試してみるのかということです。phpmyadminのことを考えるとなんとかPHP5.2で動かせるのが理想です。そうじゃないと、phpmyadminのバージョンもさげることになります。だから、PHP5.2で試すことになりました。


まずはダウングレードしないといけないパッケージを確認します。

# yum list installed | grep php
php.i386             5.3.3-1.el5.remi             installed
php-cli.i386         5.3.3-1.el5.remi             installed
php-common.i386      5.3.3-1.el5.remi             installed
php-gd.i386          5.3.3-1.el5.remi             installed
php-mbstring.i386    5.3.3-1.el5.remi             installed
php-mysql.i386       5.3.3-1.el5.remi             installed
php-pdo.i386         5.3.3-1.el5.remi             installed

続いてパッケージの削除。

# yum remove php*

というコマンドで、全部削除できる予定だったのだけど、なんか失敗した。単純にスペルミスだったのかなぁ。仕方ないので、ちゃんと指定して削除することにした。

# yum -y remove php php-cli php-common php-gd php-mbstring php-mysql php-pdo

今度はうまくいきました。
方法的にRPMのパッケージをダウンロードして、インストールすることにしました。まずはダウンロードから。http://rpms.famillecollet.com/enterprise/5/olds/i386/からダウンロードするバージョンを探す。ここはphpは5.2系しかないみたい。その中で現在1番新しい5.2.14をダウンロードする。元々インストールしてあったパッケージを探して全部ダウンロードする。

#wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-5.2.14-1.el5.remi.i386.rpm
#wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-cli-5.2.14-1.el5.remi.i386.rpm
#wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-common-5.2.14-1.el5.remi.i386.rpm
#wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-gd-5.2.14-1.el5.remi.i386.rpm
#wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-mbstring-5.2.14-1.el5.remi.i386.rpm
#wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-mysql-5.2.14-1.el5.remi.i386.rpm
#wget http://rpms.famillecollet.com/enterprise/5/olds/i386/php-pdo-5.2.14-1.el5.remi.i386.rpm

続いてインストール。

# rpm -ivh php-common-5.2.14-1.el5.remi.i386.rpm
# rpm -ivh php-cli-5.2.14-1.el5.remi.i386.rpm
# rpm -ivh php-5.2.14-1.el5.remi.i386.rpm
# rpm -ivh php-gd-5.2.14-1.el5.remi.i386.rpm
# rpm -ivh php-mbstring-5.2.14-1.el5.remi.i386.rpm
# rpm -ivh php-pdo-5.2.14-1.el5.remi.i386.rpm
# rpm -ivh php-mysql-5.2.14-1.el5.remi.i386.rpm

順番は確か上記のようでよかったと思います。でも、下記のように依存性の問題がでたら、必要なパッケージを先にインストールします。

# rpm -ivh php-5.2.14-1.el5.remi.i386.rpm
エラー: 依存性の欠如:
        php-cli = 5.2.14-1.el5.remi は php-5.2.14-1.el5.remi.i386 に必要とされています
        php-common = 5.2.14-1.el5.remi は php-5.2.14-1.el5.remi.i386 に必要とされています

割りとすんなりいきました。ここでapacheの再起動をします。

# /etc/init.d/httpd restart

ダウングレードが成功したか確認します。
ドキュメントルートにindex.phpというファイルを置いて、その中でphpinfo()をします。

# vi index.php
<?php
phpinfo();
?>

これでブラウザからindex.phpにアクセスして、php5.2.14という表示が見れれば成功です。


ダウングレードが成功しただけでは意味がありません。今回はプログラムが動くことが最終目標だったので、そのプログラムを実行して今までのようなエラーがでずに動作したので、大成功でした。勉強になったし、問題なく動作したし、よかったよかった。