twitter × Google maps with WebSocket

twitter API と Google Maps API のmashupサービス twigeo を作りました。
これだけだとありきたりの為、最近話題に上がるWebSocketを使用し、
“ほぼ”リアルタイムにServer => Clientへtweetをpushするようにしています。
誰得なサービスか分からないのですが、、皆さん様々な場所でtweetされているのですね。

WebSocketを実現する為にPHP WebSocketを使用させてもらいました。
PHP WebSocketはチャットのような複数クライアント間でメッセージのやり取りを行いやすいように
設計がされていますが、本サービスではクライアント間のやり取りはなく、
一方的にサーバ側からpushするのみとなりますので、少し手を入れる必要がありました。
また、twitter StreamingAPIを使用する際にOAuthが必要ですので、tmhOAuthを使用しています。
なお、現状WebSocketをサポートしているブラウザは、Chrome, Safariとなります。
Firefoxは次バージョンからサポートされるようです。

現在対応出来ていない仕様やバグは以下です。

  • tagエラー
  • 初期画面で自身の位置情報が固定
  • InのTweet量に対して、Outは視認性を良くする為にSleepを入れている関係上、叙々に配信が遅れてしまう
  • いづれも軽微な対応で済みそうですので、暇をみて対応したいと思います。

    Perl, Python, PHPのベンチマークを計測しました

    Perl, Python, PHPのベンチマークを計測しました。

    =====
    1. 環境 及び シナリオ

    1. 実行環境
    2. 実行環境は以下である。
      Platform: Linux(CentOS 5.6)  @sakura VPS
      Memory: 512 MB
      CPU: 仮想2Core

    3. プログラミング言語
    4. 実行・考察を行うプログラミング言語はLAMP構成として通常扱われるスクリプト言語の以下を使用する。
      ・Perl
      ・Python2.4
      ・PHP5.2

    5. 実施シナリオ
    6. No. 演算 概要
      1 i = i + 1 加算
      2 i = i – 1 減算
      3 i = i * i 乗算
      4 i = i / 3 除算
      5 i = i % 3 剰余
      6 s = “Hello,World!” 文字列代入
      7 i = len(string) 文字列数
      8 s = random() ランダム(指定なし)
      9 s = random(1, 100) ランダム(指定あり)
      10 IF (s = “Hello,World!) 文字列判断
      11 IF (i = 5) 数値判断
      12 IF (i = TRUE) Bool値判断
      13 IF文ネスト 条件分岐ネスト
      14 Switch文 ループ(Switch)
      15 While文 ループ(While)
      16 For文 ループ(For)
      17 Foreach文 ループ(Foreach)
      18 print “Hello, World!” 文字列出力
      19 関数呼び出し 関数
      20 File Open, Close オープン, クローズ
      21 File read 1行毎の読み込み
      22 File Write 1行毎の書き込み

      実行時のループ回数は、10000000回ループさせる。但し、実行に時間の掛かり過ぎるシナリオ等に関しては回数を減らす事とする。例外シナリオは以下である。
      No.17: 100000回 PHPにおいて例外が発生する為。
      No.18: 10000回 標準出力に文字列出力する為、処理
      対象のprint文の計測が行いづらい為。

    7. 実施前考察
    8. 本レポートで実行対象となるプログラミング言語はそれぞれ実績のある言語であり、Webサービス開発においてよく使用されている。私はPerl, PHPの経験はあるがPythonは今回が初めての使用となる。
      Perlは全体的に処理が速く、ファイル操作に長けているイメージがある為、全般的にPerlのパフォーマンスが良いと考えている。
      PHPは全体的に処理が遅いイメージがある。特にrandom()やファイル操作が遅いイメージがある。
      Pythonを使用するのは今回が初めてである為、あまりイメージが出来ないが、処理速度的にはPerlと同様の計測値となると予測する。

      よって、 ほぼ全シナリオでPerl < Python < PHP の順番で処理コストが高くなると考える。

    9. 実施方法
    10. 以下の要領で実施を行う。

      1. プログラミング言語毎に22個のプログラムを作成する。
      2. 実施シナリオ毎のアルゴリズムは同一とする。実行時間計測アルゴリズムに関しては後述する。
      3. 言語によっては命令が存在しないケースがある為、その場合は代替(同等)機能を使用する。No.16のPythonにおけるFor文等。
      4. Perlに関しては、ミリ秒単位を取得する組み込み関数がない為、Time::Hiresモジュールを使用する。
      5. シナリオ毎に10回実行し、実行結果として平均値を記録する。その際のコマンドは以下ように実行する。(以下はPythonでの例)
        # loop=1; while [ $loop -le 10 ]; do loop=`expr $loop + 1`; ./check1.py >> result/check1; done;
      6. eの実行結果から平均値を出力するスクリプトを実行し、平均値を得る。平均値出力スクリプトは以下である。
        ====
        #! /usr/bin/perl
        open(IN, $ARGV[0]);
        while (<IN>) {
        $total += $_;
        $count++;
        }
        close(IN);
        print $total / $count . “n”;
        ====
    11. 実行時間計測方法とサンプルコード
    12. 言語毎の実行時間計測は以下のように行う。

      以下では、各言語のシナリオ1のプログラムである。

      Perl
      ====
      #!/usr/bin/perl
      use Time::HiRes;

      my $starttime = Time::HiRes::time;
      for($i=0; $i<10000000; $i++) {
      }
      my $looptime = Time::HiRes::time – $starttime;
      my $starttime = Time::HiRes::time;

      my $j=0;
      for(my $i=0; $i<10000000; $i++) {
      $j = $j + 1;
      }
      print Time::HiRes::time – $starttime – $looptime . “n”;
      ====

      Python
      ====
      #!/usr/bin/python
      import time

      starttime = time.clock()
      for i in range(10000000):
      pass

      looptime = time.clock() – starttime
      starttime = time.clock()

      j = 0
      for i in range(10000000):
      j = j + 1

      print time.clock() – starttime – looptime
      ====

      PHP
      ====
      <?php
      $starttime = microtime(true);
      for($i = 0; $i<10000000; $i++) {
      }
      $looptime = microtime(true) – $starttime;
      $starttime = microtime(true);

      $j=0;
      for($i=0; $i<10000000; $i++) {
      $j = $j + 1;
      }
      echo microtime(true) – $starttime – $looptime . “n”;
      ?>
      ====

    2. 実行

    1. 実行結果
    2. 以下が実行結果である。シナリオ毎に最も良いタイムに橙色にしている。また、特徴的な値となった結果は赤色とし、次項以降で考察を行う。なお、単位は全て”秒”である。

      演算 Perl Python PHP
      i = i + 1 0.8 1.04 0.44
      i = i – 1 0.81 1.13 0.45
      i = i * i 0.82 1.3 0.46
      i = i / 3 0.74 1.56 0.73
      i = i % 3 0.84 1.47 0.5
      s = “Hello,World!” 0.87 0.65 0.93
      i = len(string) 1.12 1.64 1.8
      s = random() 0.22 2.05 1.73
      s = random(1, 100) 0.95 27.65 2.86
      IF (s = “Hello,World!) 0.89 0.51 0.78
      IF (i = 5) 0.94 0.49 0.44
      IF (i = TRUE) 0.97 1.08 0.37
      IF文ネスト 0.60 2.05 1.67
      Switch文 251.03 2.81 2.01
      While文 1.13 1.64 0.77
      For文 0.67 1.18 0.91
      Foreach文 0.02 0.01 0.06
      print “Hello, World!” 1.2 0.47 0.96
      関数呼び出し 1.74 1.52 1.56
      File Open, Close 69.01 61.46 80.04
      File read 2 1.46 3.54
      File Write 2.02 4.94 23.18

    3. 考察

    実行前の考察では、全てのシナリオでPerlが優位だと考えていたが、結果は異なっていた。
    この考察としてはPerlの時間計測用の関数において、ミリ秒単位で計測が出来なかった為、
    Time::Hiresモジュールを使用した事が影響している可能性がある。
    但し、Perlならではの優位性が示されているシナリオもある為、現状のまま考察を進める事とする。

    1. randint()
    2. Pythonのrandint()が非常に遅い結果となった。Perlと比較すると約27倍の差である。調査したところ、Perl, PHPのrand()は組み込み関数であるのに対し、Pythonのrandint()は標準モジュールでの提供であった。
      また、randint()よりもchoice()を使用した方が速いとの情報があった為、変更し実行計測したところ、
      27.65 → 12.36 と半分以下の実行結果となった。但し、Perl, PHPと比較するとまだ遅い結果であった。
      この事からC等で記述される組み込み関数はやはり速いということが分かった。

    3. switch文
    4. Perlのswitch文が異常な程、遅い結果となった。これはPerlには組み込みでswitch文がない為、標準モジュールのSwitchを使用した事が影響していると考えられる。最速であったPHPと比較するとその差は100倍である。
      3.1のrand()と同様に以下に組み込み機能が速いかを再認識させられた。

    5. File操作
    6. 実行前の考察よりPHPはファイル操作が不得意であると考えていたが、その通りの結果であった。特にfopen(), fclose(), fwrite()のパフォーマンスが悪かった。
      また、ファイル操作はPerlが非常に有利だと考えていたが、Pythonが健闘している。

    7. その他
    8. シナリオ毎の実行結果の色付けを確認すると、PHP列に橙色が多く付いている。PHPは全般的に処理が遅いと考えていたが、結果から見ると異なっていた。以前の経験ではPHPのrandom()は遅いと感じていたが、やはりPerlと比較すると倍以上の差が出ていた。(Pythonとの比較に関しては、3.1を参照の事)

    9. 最後に
    10. それぞれのプログラミング言語には高速化技術が存在する。例えば、Perl: mod_perl, Python: mod_wsgi, PHP: APC, eAcceralator等である。これらの技術を使用すれば、より良いパフォーマンスが出やすいが、その前段階として、言語毎の特徴を押さえた上でプログラミング言語の選択や処理ロジック, アルゴリズムを組んでいく必要がある。

    =====

    おわりです。

    PHPアクセラレータを入れてみる

    PHP5.2へバージョンアップしたついでに、PHPアクセラレータを入れました。
    こちらを参考にさせていただきました。

    PHPはアクセス都度、パース→コンパイル→(中間コード)→実行を行いますが、
    PHPアクセラレータを導入する事で、ある条件下でパース→コンパイルが不要となります。

    代表的なPHPアクセラレータは以下です。

  • APC(Alternative PHP Cache)
  • eAccelerator
  • XCache
  • PHPA(PHP Accelerator)

    PHPAはPHP5系をサポートしていない為、選択肢としては残りの3つからとなりますが、
    特に性能を求めている訳でもないので、他の方々もよくいれているAPCにします。

    まず、yumのリポジトリを設定します。

    [root@centos]# vi /etc/yum.repos.d/sea-mew.repo
    [sea-mew-noarch]
    name=SeaMew Fedora AddIn Packages
    baseurl=ftp://sea-mew.jp/yum/el5/noarch/
    enabled=1
    gpgcheck=0
    
    [sea-mew-common]
    name=SeaMew Fedora AddIn Packages
    baseurl=ftp://sea-mew.jp/yum/el5/x86_64
    enabled=1
    gpgcheck=0
    

    パッケージがあるか検索します。

    [root@centos]# yum search php-apc
    Loaded plugins: downloadonly, fastestmirror, priorities
    Loading mirror speeds from cached hostfile
     * addons: ftp.nara.wide.ad.jp
     * base: ftp.nara.wide.ad.jp
     * epel: ftp.jaist.ac.jp
     * extras: ftp.nara.wide.ad.jp
     * remi: rpms.famillecollet.com
     * rpmforge: fr2.rpmfind.net
     * updates: ftp.nara.wide.ad.jp
    addons                                                           |  951 B     00:00
    base                                                             | 2.1 kB     00:00
    c5-testing                                                       | 1.9 kB     00:00
    epel                                                             | 3.7 kB     00:00
    epel/primary_db                                                  | 3.6 MB     00:00
    extras                                                           | 2.1 kB     00:00
    remi                                                             | 2.6 kB     00:00
    remi/primary_db                                                  | 251 kB     00:01
    rpmforge                                                         | 1.1 kB     00:00
    sea-mew-common                                                   |  951 B     00:00
    sea-mew-common/primary                                           | 2.0 MB     00:01
    sea-mew-common                                                                6548/6548
    sea-mew-noarch                                                   |  951 B     00:00
    sea-mew-noarch/primary                                           | 1.0 MB     00:01
    sea-mew-noarch                                                                3898/3898
    updates                                                          | 1.9 kB     00:00
    Reducing CentOS-5 Testing to included packages only
    Finished
    2227 packages excluded due to repository priority protections
    =================================== Matched: php-apc ===================================
    php-apc.x86_64 : The apc (Alternative PHP Cache) module for PHP
    php-apc-admin.x86_64 : Web admin GUI for apc (Alternative PHP Cache)
    

    sea-mew-common にありましたので、yumでインストールします。

    [root@centos]# yum install php-apc
    Loaded plugins: downloadonly, fastestmirror, priorities
    Loading mirror speeds from cached hostfile
     * addons: ftp.nara.wide.ad.jp
     * base: ftp.nara.wide.ad.jp
     * epel: ftp.jaist.ac.jp
     * extras: ftp.nara.wide.ad.jp
     * remi: rpms.famillecollet.com
     * rpmforge: fr2.rpmfind.net
     * updates: ftp.nara.wide.ad.jp
    Reducing CentOS-5 Testing to included packages only
    Finished
    2227 packages excluded due to repository priority protections
    Setting up Install Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package php-apc.x86_64 1:3.1.6-0m set to be updated
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ========================================================================================
     Package           Arch             Version              Repository                Size
    ========================================================================================
    Installing:
     php-apc           x86_64           1:3.1.6-0m           sea-mew-common           304 k
    
    Transaction Summary
    ========================================================================================
    Install       1 Package(s)
    Upgrade       0 Package(s)
    
    Total download size: 304 k
    Is this ok [y/N]: y
    Downloading Packages:
    php-apc-3.1.6-0m.x86_64.rpm                                      | 304 kB     00:00
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Installing     : php-apc                                                          1/1
    
    Installed:
      php-apc.x86_64 1:3.1.6-0m
    
    Complete!
    

    GUIが用意されているようですので、インストールしておきます。

    [root@centos]# yum install php-apc-admin
    Loaded plugins: downloadonly, fastestmirror, priorities
    Loading mirror speeds from cached hostfile
     * addons: ftp.nara.wide.ad.jp
     * base: ftp.nara.wide.ad.jp
     * epel: ftp.jaist.ac.jp
     * extras: ftp.nara.wide.ad.jp
     * remi: rpms.famillecollet.com
     * rpmforge: fr2.rpmfind.net
     * updates: ftp.nara.wide.ad.jp
    Reducing CentOS-5 Testing to included packages only
    Finished
    2227 packages excluded due to repository priority protections
    Setting up Install Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package php-apc-admin.x86_64 1:3.1.6-0m set to be updated
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ========================================================================================
     Package               Arch           Version              Repository              Size
    ========================================================================================
    Installing:
     php-apc-admin         x86_64         1:3.1.6-0m           sea-mew-common          22 k
    
    Transaction Summary
    ========================================================================================
    Install       1 Package(s)
    Upgrade       0 Package(s)
    
    Total download size: 22 k
    Is this ok [y/N]: y
    Downloading Packages:
    php-apc-admin-3.1.6-0m.x86_64.rpm                                |  22 kB     00:00
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Installing     : php-apc-admin                                                    1/1
    /var/tmp/rpm-tmp.74136: line 1: fg: no job control
    エラー: %post(php-apc-admin-3.1.6-0m.x86_64) スクリプトの実行に失敗しました。終了ステー タス 1
    
    Installed:
      php-apc-admin.x86_64 1:3.1.6-0m
    
    Complete!
    

    エラーが出ましたが、一旦このまま進めます。
    以下をコピーし、apacheをrestartします。

  • apc-mmap.so
  • apc-sem.so
    [root@centos]# cp -a /usr/lib64/php/extensions/apc-*.so /usr/lib64/php/modules/
    [root@centos]# ls -al /usr/lib64/php/modules/apc*
    -rwxr-xr-x 1 root root 166067  1月 20 06:09 /usr/lib64/php/modules/apc-mmap.so
    -rwxr-xr-x 1 root root 163217  1月 20 06:09 /usr/lib64/php/modules/apc-pthread.so
    -rwxr-xr-x 1 root root 163395  1月 20 06:09 /usr/lib64/php/modules/apc-sem.so
    -rwxr-xr-x 1 root root 162476  1月 20 06:09 /usr/lib64/php/modules/apc-spinlocks.so
    [root@centos]# service httpd restart
    httpd を停止中:                                            [  OK  ]
    httpd を起動中:                                            [  OK  ]
    
  • PHP5.2xインストール

    WordPressのplugin quick-cacheをインストールしたところ、PHP5.2へバージョンアップしろと言い出した為、
    PHP5.1 → 5.2へバージョンアップをする事にしました。
    現在のyumでは5.1までしか入らないようですので、新たにリポジトリを追加して5.2をインストールします。
    なお、こちらを参考にさせて頂きました。

    最初にPHPのバージョンを確認します。

    [root@centos]# php -v
    PHP 5.1.6 (cli) (built: Nov 29 2010 16:47:46)
    Copyright (c) 1997-2006 The PHP Group
    Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
    
    [root@centos]# yum list installed | grep php*
    php.x86_64                                5.1.6-27.el5_5.3             installed
    php-cli.x86_64                            5.1.6-27.el5_5.3             installed
    php-common.x86_64                         5.1.6-27.el5_5.3             installed
    php-mbstring.x86_64                       5.1.6-27.el5_5.3             installed
    php-mcrypt.x86_64                         5.1.6-15.el5.centos.1        installed
    php-mysql.x86_64                          5.1.6-27.el5_5.3             installed
    php-pdo.x86_64                            5.1.6-27.el5_5.3             installed
    

    続いて、リポジトリを追加します。

    [root@centos]# vi /etc/yum.repos.d/utterramblings.repo
    [utterramblings]
    name=Jason's Utter Ramblings Repo
    baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
    priority=0
    

    updateします。

    [root@centos]# yum -y update php
    Loaded plugins: downloadonly, fastestmirror, priorities
    Loading mirror speeds from cached hostfile
     * addons: ftp.nara.wide.ad.jp
     * base: ftp.nara.wide.ad.jp
     * epel: ftp.jaist.ac.jp
     * extras: ftp.nara.wide.ad.jp
     * remi: rpms.famillecollet.com
     * rpmforge: fr2.rpmfind.net
     * updates: ftp.nara.wide.ad.jp
    Reducing CentOS-5 Testing to included packages only
    Finished
    548 packages excluded due to repository priority protections
    Setting up Update Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package php.x86_64 0:5.2.16-jason.1 set to be updated
    --> Processing Dependency: php-common = 5.2.16-jason.1 for package: php
    --> Processing Dependency: php-cli = 5.2.16-jason.1 for package: php
    --> Running transaction check
    ---> Package php-cli.x86_64 0:5.2.16-jason.1 set to be updated
    --> Processing Dependency: php-common = 5.1.6-27.el5_5.3 for package: php-pdo
    --> Processing Dependency: php-common = 5.1.6-27.el5_5.3 for package: php-mbstring
    --> Processing Dependency: php-common = 5.1.6-27.el5_5.3 for package: php-mysql
    ---> Package php-common.x86_64 0:5.2.16-jason.1 set to be updated
    --> Running transaction check
    ---> Package php-mbstring.x86_64 0:5.2.16-jason.1 set to be updated
    ---> Package php-mysql.x86_64 0:5.2.16-jason.1 set to be updated
    --> Processing Dependency: libmysqlclient.so.16(libmysqlclient_16)(64bit) for package: php-mysql
    --> Processing Dependency: libmysqlclient.so.16()(64bit) for package: php-mysql
    ---> Package php-pdo.x86_64 0:5.2.16-jason.1 set to be updated
    --> Running transaction check
    --> Processing Dependency: libmysqlclient.so.15()(64bit) for package: mysql-server
    --> Processing Dependency: libmysqlclient.so.15()(64bit) for package: perl-DBD-MySQL
    --> Processing Dependency: libmysqlclient.so.15(libmysqlclient_15)(64bit) for package: mysql-server
    --> Processing Dependency: libmysqlclient.so.15(libmysqlclient_15)(64bit) for package: perl-DBD-MySQL
    --> Processing Dependency: libmysqlclient_r.so.15()(64bit) for package: mysql-server
    --> Processing Dependency: libmysqlclient_r.so.15(libmysqlclient_15)(64bit) for package: mysql-server
    --> Processing Dependency: mysql = 5.0.77-4.el5_5.4 for package: mysql-server
    ---> Package mysql.x86_64 0:5.1.52-jason.1 set to be updated
    --> Running transaction check
    ---> Package mysql-server.x86_64 0:5.1.52-jason.1 set to be updated
    ---> Package mysqlclient15.x86_64 0:5.0.91-1.jason.1 set to be updated
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ========================================================================================
     Package              Arch          Version                 Repository             Size
    ========================================================================================
    Updating:
     php                  x86_64        5.2.16-jason.1          utterramblings        3.8 M
    Installing for dependencies:
     mysqlclient15        x86_64        5.0.91-1.jason.1        utterramblings        2.0 M
    Updating for dependencies:
     mysql                x86_64        5.1.52-jason.1          utterramblings        3.5 M
     mysql-server         x86_64        5.1.52-jason.1          utterramblings         13 M
     php-cli              x86_64        5.2.16-jason.1          utterramblings        2.6 M
     php-common           x86_64        5.2.16-jason.1          utterramblings        522 k
     php-mbstring         x86_64        5.2.16-jason.1          utterramblings        1.4 M
     php-mysql            x86_64        5.2.16-jason.1          utterramblings        280 k
     php-pdo              x86_64        5.2.16-jason.1          utterramblings        169 k
    
    Transaction Summary
    ========================================================================================
    Install       1 Package(s)
    Upgrade       8 Package(s)
    
    Total size: 27 M
    Downloading Packages:
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Updating       : php-common                                                      1/17
      Installing     : mysqlclient15                                                   2/17
      Updating       : php-pdo                                                         3/17
      Updating       : mysql                                                           4/17
      Updating       : php-cli                                                         5/17
      Updating       : php-mysql                                                       6/17
      Updating       : php                                                             7/17
    
     ******************************************************************************
     * If this is a new installation you should run 'mysql_secure_installation'.  *
     *                                                                            *
     * If you are upgrading from a previous version of MySQL you should run the   *
     * 'mysql_upgrade' script to check your tables and update them to the newest  *
     * format. This command may take a long time to run if you have large tables. *
     ******************************************************************************
    
      Updating       : mysql-server                                                    8/17
      Updating       : php-mbstring                                                    9/17
      Cleanup        : php-common                                                     10/17
      Cleanup        : php-mysql                                                      11/17
      Cleanup        : php                                                            12/17
      Cleanup        : php-pdo                                                        13/17
      Cleanup        : php-cli                                                        14/17
      Cleanup        : mysql                                                          15/17
      Cleanup        : mysql-server                                                   16/17
      Cleanup        : php-mbstring                                                   17/17
    
    Dependency Installed:
      mysqlclient15.x86_64 0:5.0.91-1.jason.1
    
    Updated:
      php.x86_64 0:5.2.16-jason.1
    
    Dependency Updated:
      mysql.x86_64 0:5.1.52-jason.1              mysql-server.x86_64 0:5.1.52-jason.1
      php-cli.x86_64 0:5.2.16-jason.1            php-common.x86_64 0:5.2.16-jason.1
      php-mbstring.x86_64 0:5.2.16-jason.1       php-mysql.x86_64 0:5.2.16-jason.1
      php-pdo.x86_64 0:5.2.16-jason.1
    
    Complete!
    

    インストール出来たので、確認します。

    [root@centos]# 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.16 (cli) (built: Dec 17 2010 14:11:16)
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies
    

    PHP自体は5.2になっていますが、Warningが出ていました。
    php-mcryptが5.1のままでしたので、明示してupdateします。

    [root@centos]# yum list installed | grep php*
    php.x86_64                                5.2.16-jason.1               installed
    php-cli.x86_64                            5.2.16-jason.1               installed
    php-common.x86_64                         5.2.16-jason.1               installed
    php-mbstring.x86_64                       5.2.16-jason.1               installed
    php-mcrypt.x86_64                         5.1.6-15.el5.centos.1        installed
    php-mysql.x86_64                          5.2.16-jason.1               installed
    php-pdo.x86_64                            5.2.16-jason.1               installed
    
    [root@centos]# yum update php-mcrypt
    Loaded plugins: downloadonly, fastestmirror, priorities
    Loading mirror speeds from cached hostfile
     * addons: ftp.nara.wide.ad.jp
     * base: ftp.nara.wide.ad.jp
     * epel: ftp.jaist.ac.jp
     * extras: ftp.nara.wide.ad.jp
     * remi: rpms.famillecollet.com
     * rpmforge: fr2.rpmfind.net
     * updates: ftp.nara.wide.ad.jp
    Reducing CentOS-5 Testing to included packages only
    Finished
    548 packages excluded due to repository priority protections
    Setting up Update Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package php-mcrypt.x86_64 0:5.2.16-jason.1 set to be updated
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ========================================================================================
     Package            Arch           Version                 Repository              Size
    ========================================================================================
    Updating:
     php-mcrypt         x86_64         5.2.16-jason.1          utterramblings          50 k
    
    Transaction Summary
    ========================================================================================
    Install       0 Package(s)
    Upgrade       1 Package(s)
    
    Total download size: 50 k
    Is this ok [y/N]: y
    Downloading Packages:
    php-mcrypt-5.2.16-jason.1.x86_64.rpm                             |  50 kB     00:00
    Running rpm_check_debug
    Running Transaction Test
    Finished Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Updating       : php-mcrypt                                                       1/2
      Cleanup        : php-mcrypt                                                       2/2
    
    Updated:
      php-mcrypt.x86_64 0:5.2.16-jason.1
    
    Complete!
    

    忘れずに最初追加したリポジトリを無効化(enabled=0)しておきます。

    [root@centos]# vi /etc/yum.repos.d/utterramblings.repo
    [utterramblings]
    name=Jason’s Utter Ramblings Repo
    baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
    enabled=0
    gpgcheck=1
    gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
    priority=0
    

    apache restart

    [root@centos]# service httpd restart
    httpd を停止中:                                            [  OK  ]
    httpd を起動中:                                            [  OK  ]
    

    ブラウザから確認してみると表示されなかった為、apacheのエラーログを確認すると
    メモリサイズがオーバーしているようなので、今回は手っ取り早く割り当てを増やしました。

    [root@centos]# tail -f /etc/httpd/logs/error_log
    PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted.........
    [root@centos]# vi /etc/php.ini
    ...
    memory_limit = 48M
    ...
    

    最後にもう一度apacheをrestartすれば完了です。