PHP5.3のPEARをアップデート
Category
Server
PHP5.3系でPEARをアップデートする際、ちょっとしたコツが必要になります。
これは、デフォルトのリポジトリ経由でアップデートする際、PHPのパッケージが分かれている事が原因のようです(PHP5.3とそれ以前のPHP5.1.6でパッケージが分かれています)。
Remi等の外部リポジトリを使用すれば、パッケージが分かれていないため、依存関係の問題はさほど気にすることはありませんが、案件によっては、サードパーティ製の外部リポジトリの使用は避けたい場合もあります(個人的には、デフォルトでは用意されていないけど、「どうしても機能的に使いたい!」といった場合は使っちゃいますけど...)。
今回は、php53パッケージ(デフォルトのリポジトリを使用)でPHPの5.3系をインストールしたサーバーで、PEARをアップデートする手順を覚え書きとして書き残しておきます。
Keyword:PEAR,pearコマンド,PHP5.3
PHP5.3のPEARアップデート手順
1.PEARのインストールパッケージを確認
現在インストールされているPEARのパッケージを確認します。
コマンド
# PEARのインストールパッケージを確認 pear list # インストールされているパッケージが表示されます(※以下は表示例です) Archive_Tar ○.○.○ Console_Getopt ○.○.○ Mail_Mime ○.○.○ Mail_mimeDecode ○.○.○ PEAR ○.○.○ Structures_Graph ○.○.○ XML_RPC ○.○.○
補足
●PEARのインストールパッケージを確認
インストール済みのPEARのパッケージを確認します。
PHP5.3をインストールした後、”pear list”コマンドでパッケージを確認すると、大量のエラーが出力されるはずです(※ここではひとまずそのエラーは無視して、インストール済みのパッケージのみを確認します)。
これは、PEARにはphp53-pearがないため、依存関係にあるパッケージでエラーが出力されてしまうようです。例えば、php53-commonしか入っていなくても、php-commonとのコンフリクトエラーが出力されたりします。”依存関係でphp-commonも必要だけど、php53-commonとコンフリクトします”といったように、PEARがphp53~のパッケージで認識できていないものがあることが原因のようです。ですが、PEAR自体はPHP5.3に対応していますので、各パッケージを強制的にアップデートすることで、このエラーを回避することができます。
●インストールされているパッケージが表示されます
“○.○.○”はインストールされているパッケージのバージョンです。
2.PEARパッケージのアップデートとPEAR本体のアップデート
PEAR本体と依存関係にあるパッケージを強制的にアップデートした後に、PEAR本体をアップデートします。
コマンド
# PEARと依存関係にあるパッケージを強制的にアップデート pear upgrade --force Archive_Tar pear upgrade --force Console_Getopt pear upgrade --force Mail_Mime pear upgrade --force Mail_mimeDecode pear upgrade --force Structures_Graph pear upgrade --force XML_RPC # PEAR本体をアップデート pear upgrade PEAR
補足
●PEARと依存関係にあるパッケージを強制的にアップデート
PEAR本体より先に、PEARと依存関係にあるパッケージを強制的にアップデートします。各パッケージのアップデート時にエラーが出力されますが、無視してアップデートを続けます。
●PEAR本体をアップデート
PEARと依存関係にあるパッケージを強制的にアップデートした後、PEAR本体をアップデートします。
3.再度PEARのインストールパッケージを確認
PEARと依存関係にあるパッケージとPEAR本体をアップデートした後、再度PEARのインストールパッケージを確認します。
コマンド
# PEARのインストールパッケージを確認 pear list
補足
エラーが出力されていなければOK!(エラーが出なくなっているはずです)。
各パッケージのバージョンがアップデートされているかも確認します。
PEAR本体のみのバージョン確認コマンドは以下でもOK。
⇒ pear version
PHP5.3でPEARを使用する際の注意点
PHP5.3でPEARを使用する際、Deprecatedエラーが表示されてしまう場合があります。
Deprecatedエラーとは、PHP5.3から追加されたエラーレベルで、特定の機能が推奨されないことを示す際に表示されます。
どういった場合にこのエラーが出るかというと、クラスのインスタンスを作成する際、参照渡しをするとDeprecatedエラーが出力されてしまいます(※PHP5はnewすると参照になりますが、”=&”でさらに参照で受け取ろうとしていることが原因のようです)。
[参考サイト]
PHP 5.3.x で推奨されない機能
php.iniの”error_reporting”の変更でDeprecatedエラーを非表示にできます。
php.ini
;Deprecatedエラーを非表示にする error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
補足
注意点としては、PHP5.3の場合の対処法であるという点です。
今後、PHP5.4以降にバージョンアップした際、この対策が施される可能性もあります。その場合、Deprecatedエラーは出力されませんがエラーとなり、スクリプトが動作しなくなることも考えられますので、PHP5.4以降ではPEAR本体側を修正することをおすすめします。
PEARをPHP5.3以降で使用する場合、当記事のおすすめ書籍でも紹介している「PHPによるWebアプリケーションスーパーサンプル活用編 第3版」に非常に分りやすく解説されています。
PHP5.3以降で使用するにはいろいろと問題があるPEARですが、PHP5.3以降にも対応したPEAR2も開発されています。現状では名前空間の動向が決まっていない等の理由で完全に対応されているわけではありませんので、あしからず。
⇒ PEAR2
関連記事(※当記事と関連性が高いと思われる記事)
PEARをアップデートしました
2012/06/09CentOSにPHP5.3をインストール
2012/04/04APCでPHPの処理を高速化
2012/06/12CentOSでPHPのバージョンをアップデート
2011/12/23PHPを5.3系にアップデートしました
2012/04/01おすすめ書籍・商品(※当記事と関連性が高いと思われる書籍・商品)