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.3 Assigning the return value of new by reference is deprecated – 為せば成る・・・かもしれない
これは、PHP5では、newすると参照になるのに、それを =& でさらに参照で受け取ろうとしてエラーが出ている模様。
って言うことらしいのですが、それって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をアップグレードすればいけるみたいです。
後半、なんか遊☆戯☆王みたいな劇的な展開になっていますが、プログラマがプログラム書いてるときの頭ん中はだいたいそんな感じです。(ウソ)
参考
- php5.3 Assigning the return value of new by reference is deprecated – 為せば成る・・・かもしれない
- “PHP Deprecated: Assigning the return value of new by reference is deprecated in …” フォーラム – CakePHP Users in Japan
- pear自身のアップグレード: Masatoshi::Memoranda
- あなたと私のインナースペース – PEAR Installerのアップデートなど。