PHP 5.2.10 and PEAR – Notice: Undefined variable: dorest in PEAR/Command/Install.php on line 1220

Today, after upgrading packages with apt-get on a server running Debian Lenny my PEAR installation seemed to be broken. PHP had been updated to 5.2.10 and PEAR version was now 1.8.0. So when I realised that PEAR wasn’t the latest stable I tried upgrading PEAR using the command I’ve always used: pear upgrade pear, where the first “pear” is the command we run, then the “upgrade” sub-command and finally the name of the package we want to work with, unsurprisingly “pear”.

So I type the following expecting a happy success message and get this instead:

$ pear upgrade pear
Notice: Undefined variable: dorest in PEAR/Command/Install.php on line 1220
Notice: Undefined variable: latest in PEAR/Command/Install.php on line 1228
Notice: Undefined variable: latest in PEAR/Command/Install.php on line 1234
Warning: array_change_key_case(): The argument should be an array in PEAR/Command/Install.php on line 1234
Nothing to upgrade

After a quick look at the problem I figured out that it was a problem with the cached channel data that PEAR stores under a directory called ./channels in the PEAR installation directory. The problem is quickly solved by deleting the files in that directory. To find out where PEAR is installed you can use the “pear list-files” command as follows:

$ pear list-files pear
Installed Files For pear
Type   Install Path
php    /usr/local/zend/share/pear/OS/Guess.php
php    /usr/local/zend/share/pear/PEAR/ChannelFile/Parser.php

In this case my installation directory is /usr/local/zend/share/pear. So now that we know were the directory is we change directory and delete all files in it.

$ cd /usr/local/zend/share/pear/.channels/
$ rm -rf *

After deleting the channels cache you will need to update it by issuing the following command:

$ pear channel-update
Updating channel ""
Update of Channel "" succeeded

And finally we run the upgrade as originally expected.

$ pear upgrade pear
downloading PEAR-1.9.0.tgz ...
Starting to download PEAR-1.9.0.tgz (291,634 bytes)
.................................done: 291,634 bytes
downloading Structures_Graph-1.0.3.tgz ...
Starting to download Structures_Graph-1.0.3.tgz (30,191 bytes)
...done: 30,191 bytes
upgrade ok: channel://
upgrade ok: channel://
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)
PEAR: To install optional features use "pear install pear/PEAR#featurename"

To wrap it up lets use the “pear info” command to check that we are now running the latest version (1.9.0 in this case).

$ pear info pear
Release Type           PEAR-style PHP-based Package
Name                   PEAR
Summary                PEAR Base System
Description            The PEAR package contains:
Categories: Uncategorized
  • Co Lega

    Thanks! it made my day.
    A suggestion: it worked for me without having to delete the .channels.
    I did just the channel update first, assuming the cache would be renewed and it worked:
    > pear channel-update
    > pear upgrade pear

    • lupomontero

      Thanks for the update. Bear in mind that this article is over 2 years old… so it may well be out-dated. Glad you found it useful. 😉