※弊社記事はたぶんにPRが含まれますので
話半分で受け取ってください。

PEARを動かしたらいろいろエラーが出力されたのでPEARを強制的にアップグレードした

 pearを動かしたら、というか、peclでapcのアップグレードをしようとしたら、なんかものっそい勢いで「Assigning the return value of new by reference is deprecated」とかいうエラーが出力されたので、対処。

 php5.3にアップグレードした際に、apcがなんか動かなくなったので再インストール……しようと思ったらなんかすっごいエラー出てきた。

: Assigning the return value of new by reference is deprecated in Frontend.php on line 92

: Assigning the return value of new by reference is deprecated in Config.php on line 575

: Assigning the return value of new by reference is deprecated in Config.php on line 605

: Assigning the return value of new by reference is deprecated in Config.php on line 672
(以下、延々とこんな調子)

 調べてみたら、このエラー、php5.3で出て来ることがあるようで。

PEAR使ってる状態でPHPのバージョンを上げると、PEARから上記エラーが出てくる場合がありますが・・・
これは、PHP5では、newすると参照になるのに、それを =& でさらに参照で受け取ろうとしてエラーが出ている模様。

php5.3 Assigning the return value of new by reference is deprecated – 為せば成る・・・かもしれない

 って言うことらしいのですが、それってphp5.3からその辺変わったんでしょうか。(特に調べる気もないという。)

PEARをバージョンアップする

 ひょっとしたらPEARをバージョンアップしたら、消えるかも?
 ということで、PEARをバージョンアップしてみることにしました。とりあえずlist-upgrades。

# pear list-upgrades
(エラーを省略)
pear.php.net Available Upgrades (stable):
=========================================
Channel      Package        Local          Remote         Size
pear.php.net Archive_Tar    1.3.1 (stable) 1.3.7 (stable) 17.2kB
pear.php.net Console_Getopt 1.2 (stable)   1.3.1 (stable) 4.4kB
pear.php.net PEAR           1.4.9 (stable) 1.9.4 (stable) 290kB
pear.php.net XML_RPC        1.5.0 (stable) 1.5.5 (stable) 32kB

 あー結構、アップデートしてませんでしたねー(棒)
 早速アップデートしようと、

# pear upgrade PEAR

とコマンドを叩いたのですが、エラーに紛れて別のエラーが出現。

(エラーを省略)
pear/PEAR dependency package "pear/Console_Getopt" downloaded version 1.3.1 is not the recommended version 1.2.3, but may be compatible, use --force to install
(エラーを省略)
pear/Archive_Tar requires PEAR Installer (version >= 1.5.4), installed version is 1.4.9
(エラーを省略)
pear/PEAR dependency package "pear/Console_Getopt" downloaded version 1.3.1 is not the recommended version 1.2.3, but may be compatible, use --force to install
(エラーを省略)

 つまり、Console_Getopt というパッケージのバージョンが低くてアップグレード出来ない、ということらしいです。

 調べたら、これはバージョンが足りてないパッケージを強制的にアップグレードすればいけるらしい。

 ってことでまずは、Archive_Tar の強制アップグレード。

# pear upgrade --force Archive_Tar

 出続けるエラーにはかまわず、ずっと俺のターン。
 すかさず Console_Getopt を強制アップグレード!

# pear upgrade --force Console_Getopt

 これでとどめだ! upgrade PEAR!

# pear upgrade PEAR

 エラーの波が止まり、画面はコマンド待機状態に……
アップデートは……? 成功したのか……?

# pear version
PEAR Version: 1.9.4
PHP Version: 5.3.3
Zend Engine Version: 2.3.0

 キタ━━━━━━(゚∀゚)━━━━━━ !!!!!

 エラーも出なくなったー。やっぱり「Assigning the うんぬん」はPEARのバージョンが低かったことに起因していたようです。

という感じ

 つまり、Archive_Tar と Console_Getopt を強制的にアップグレードして、その後にPEARをアップグレードすればいけるみたいです。

 後半、なんか遊☆戯☆王みたいな劇的な展開になっていますが、プログラマがプログラム書いてるときの頭ん中はだいたいそんな感じです。(ウソ)

参考

The PEAR Installer Manifesto: Revolutionizing PHP Application Development and Deployment (English Edition)

  • メーカー:Packt Publishing
  • カテゴリ:Kindle版
  • 発売日:2006/10/30

関連する記事