Search code examples
phpphpunitpear

Command phpunit -v gives me require_once error... what's wrong with my PEAR?


As per title, running phpunit -v on a fresh PHPUnit PEAR installation gives me a require_once failed error. Here is some additional information, i hope that anyone can help me with this.

Warning: require_once(File/Iterator/Autoload.php): failed to open stream: No such file or directory in C:\WAMP\PEAR\pear\PHPUnit\Autoload.php on line 45

Call Stack:
    0.0005     326744   1. {main}() C:\WAMP\PEAR\phpunit:0
    0.0011     369184   2. require('C:\WAMP\PEAR\pear\PHPUnit\Autoload.php') C:\WAMP\PEAR\phpunit:43


Fatal error: require_once(): Failed opening required 'File/Iterator/Autoload.php' (include_path='.;C:\WAMP\PEAR;C:\WAMP\PEAR\pear\PHPUnit') in C:\WAMP\PEAR\pear\PHPUnit\Autoload.php on line 45

Call Stack:
    0.0005     326744   1. {main}() C:\WAMP\PEAR\phpunit:0
    0.0011     369184   2. require('C:\WAMP\PEAR\pear\PHPUnit\Autoload.php') C:\WAMP\PEAR\phpunit:43



    php -v

PHP 5.3.14 (cli) (built: Jun 13 2012 18:51:28) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.0, Copyright (c) 2002-2012, by Derick Rethans

`pear version`:

PEAR Version: 1.9.4
PHP Version: 5.3.14
Zend Engine Version: 2.3.0
Running on: Windows NT MARCO-PC 6.1 build 7601 (Windows 7 Home Premium Edition Service Pack 1) i586

    pear config-get php_dir

C:\WAMP\PEAR\pear

    echo %path% (only relevant paths)
C:\WAMP\PHP;C:\WAMP\PEAR;

    echo %PHP_PEAR_BIN_DIR%
C:\WAMP\PEAR

    echo %PHP_PEAR_DATA_DIR%
C:\WAMP\PEAR\data

    echo %PHP_PEAR_DOC_DIR%
C:\WAMP\PEAR\docs

    echo %PHP_PEAR_INSTALL_DIR%

C:\WAMP\PEAR\pear

    echo %PHP_PEAR_PHP_BIN%

C:\WAMP\PHP\php.exe

    echo %PHP_PEAR_SYSCONF_DIR%

C:\WAMP\PEAR

    echo %PHP_PEAR_TEST_DIR%

C:\WAMP\PEAR\tests

    pear list -c pear.phpunit.de

    INSTALLED PACKAGES, CHANNEL PEAR.PHPUNIT.DE:
    ============================================
    PACKAGE            VERSION STATE
    File_Iterator      1.3.1   stable
    PHPUnit            3.6.12  stable
    PHPUnit_MockObject 1.1.1   stable
    PHP_CodeCoverage   1.1.3   stable
    PHP_Invoker        1.1.0   stable
    PHP_Timer          1.0.2   stable
    PHP_TokenStream    1.1.3   stable
    Text_Template      1.1.1   stable

Solution

  • Check Dependencies

    If you recently upgraded to PHPUnit 3.6, there's a possibility you still have an older version of File_Iterator installed and that's the problem (Based on a vague memory of the same error).

    You can check the versions of installed packages with:

    pear list -c pear.phpunit.de
    

    If anything looks not-right, or just to be sure upgrade PHPUnit to ensure it's at the latest version and so are all dependencies:

    $ pear update-channels
    $ pear upgrade phpunit/PHPUnit
    Did not download optional dependencies: phpunit/PHP_Invoker, use --alldeps to download automatically
    phpunit/PHPUnit can optionally use package "phpunit/PHP_Invoker" (version >= 1.1.0)
    phpunit/PHPUnit_MockObject can optionally use PHP extension "soap"
    downloading PHPUnit-3.6.12.tgz ...
    Starting to download PHPUnit-3.6.12.tgz (119,220 bytes)
    ..........................done: 119,220 bytes
    downloading File_Iterator-1.3.1.tgz ...
    Starting to download File_Iterator-1.3.1.tgz (5,157 bytes)
    ...done: 5,157 bytes
    downloading PHP_CodeCoverage-1.1.3.tgz ...
    Starting to download PHP_CodeCoverage-1.1.3.tgz (132,726 bytes)
    ...done: 132,726 bytes
    downloading PHPUnit_MockObject-1.1.1.tgz ...
    Starting to download PHPUnit_MockObject-1.1.1.tgz (19,897 bytes)
    ...done: 19,897 bytes
    downloading PHP_TokenStream-1.1.3.tgz ...
    Starting to download PHP_TokenStream-1.1.3.tgz (9,860 bytes)
    ...done: 9,860 bytes
    upgrade ok: channel://pear.phpunit.de/File_Iterator-1.3.1
    upgrade ok: channel://pear.phpunit.de/PHPUnit_MockObject-1.1.1
    upgrade ok: channel://pear.phpunit.de/PHP_TokenStream-1.1.3
    upgrade ok: channel://pear.phpunit.de/PHP_CodeCoverage-1.1.3
    upgrade ok: channel://pear.phpunit.de/PHPUnit-3.6.12
    $ phpunit -v
    PHPUnit 3.6.12 by Sebastian Bergmann.
    

    Check include path

    if you have the appropriate version of File_Iterator (and other dependencies) installed and File/Iterator/Autoload.php is missing - it's not installed anywhere that php is looking for it. Use pear list-files phpunit/File_Iterator to see exactly where pear thinks the file is - and verify that the file exists.

    If it does then the pear root is not in your path, add it and you're good to go.