2012年3月12日月曜日

運用しているPHP のバージョンをアップデート

Posted on 1:08

アップデートまでのいきさつ


開発からは7年ほど経過していますが、サーバ自体を去年入れ替えました。ただCentOS5の標準のPHPを使用したため PHPのバージョンは5.1.6 でした。

今まで問題はなかったのですが、Smarty3 にアップグレード した時に問題が発生しました。
具体的には escape 処理を使った時に出力した画面が真っ白になってしまいました。
Smarty3の継承機能が便利な事もあり、 escape が使用出来ない件に関しては目をつぶっていました。

ちょうど、新規開発をするタイミングもあり、原因を調査しようと考えました。
最初にescapeのソースを確認します。

smarty2

function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
{
    switch ($esc_type) {
        case 'html':
            return htmlspecialchars($string, ENT_QUOTES, $char_set);


smarty3

function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
{
    if (!$char_set) {
        $char_set = Smarty::$_CHARSET;
    }

    switch ($esc_type) {
        case 'html':
            return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);


比較すると 関数 htmlspecialchars の double_encode が追加され 引数が異なっています。
double_encode は 5.2.3 からのサポートなのでこれが原因と考えられます。
必要条件には Smarty 3.x: PHP 5.2+ とあるのですが、5.2.3 以降を使用した方が良いかもしれません。

アップデートの手順

CentOS5での手順です。コマンドだけですが。。。

# cd /etc/yum.repos.d/
# wget http://dev.centos.org/centos/5/CentOS-Testing.repo
# yum --enablerepo=c5-testing update php
# httpd -k restart

Apacheの再起動をしないと Apacheモジュールとして動かしているPHP は 古いバージョンのままになります。

引き続き。。。

それはまた別の話。と書いていましたが、何日かして、Fatal error: Call to undefined function mcrypt_get_key_size() が発生しました。原因としては mcrypt のモジュールが存在しないという事のようです。確認してみます。

確認1. yum info php-mcrypt
Installed Packages
Name : php-mcrypt
Arch : x86_64
Version 5.1.6
を見るとインストールはされていますが Version が 5.1.6 と古い為にエラーが起きている様です。

確認2. php -v

#php -v

PHP Warning:  PHP Startup: mcrypt: Unable to initialize module  ← ここ
Module compiled with module API=20050922, debug=0, thread-safety=0
PHP    compiled with module API=20060613, debug=0, thread-safety=0
These options need to match
 in Unknown on line 0
PHP 5.2.10 (cli) (built: Nov 13 2009 11:44:05) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

確認の結果 mcrypt を アップデートする事に決めした。

google ます。

wget ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/fedora/9/olds/x86_64/php-mcrypt-5.2.10-1.fc9.remi.x86_64.rpm

この辺は決まり文句。


rpm -e php-mcrypt-5.1.6-15.el5.centos.1.x86_64
rpm -i --nodeps php-mcrypt-5.2.10-1.fc9.remi.x86_64.rpm

確認。

#php -v


PHP 5.2.10 (cli) (built: Nov 13 2009 11:44:05)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies


# rpm -qa |grep php
php-5.2.10-1.el5.centos
php-devel-5.2.10-1.el5.centos
php-pear-1.4.9-6.el5
php-common-5.2.10-1.el5.centos
php-cli-5.2.10-1.el5.centos
php-gd-5.2.10-1.el5.centos
php-ldap-5.2.10-1.el5.centos
php-mbstring-5.2.10-1.el5.centos
php-pdo-5.2.10-1.el5.centos
php-mysql-5.2.10-1.el5.centos
php-mcrypt-5.2.10-1.fc9.remi

一つだけ、fc9.remi となっているのは気持ち悪いが バージョンは揃いました。

アパッチを再起動して確認 ! して画面が正常に表示されました。

英語のサイトですが

http://wiki.centos.org/HowTos/PHP_5.1_To_5.2

を参考にしました。











1 件のコメント

  1. Our totally built-in answer means decreased lead Hand Massager occasions, so engineers can design, check, and manufacture parts sooner and more effectively than with different options. HP® Multi Jet Fusion is a production-grade know-how that spreads out a fantastic layer of powder, deposits a fluid within the desired areas, and then fuses these areas. Selective Laser Sintering uses high-powered lasers to sinter powdered material, binding it collectively to create a solid structure.

    返信削除