【问题标题】:Command phpunit -v gives me require_once error... what's wrong with my PEAR?命令 phpunit -v 给我 require_once 错误...我的 PEAR 有什么问题?
【发布时间】:2012-09-03 18:46:46
【问题描述】:

根据标题,在全新的 PHPUnit PEAR 安装上运行 phpunit -v 会给我一个 require_once failed 错误。这是一些额外的信息,我希望任何人都可以帮助我。

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

【问题讨论】:

  • 很明显.. File/Iterator/Autoload.php 文件不存在。
  • @MarcB 这怎么可能?我按照建议安装了 PHPUnit...
  • 安装了phpunit并不意味着它所依赖的一切都是。
  • 你能显示pear list的输出吗?
  • @DarrenCook 更新了问题,感谢您的帮助。

标签: php phpunit pear


【解决方案1】:

检查依赖关系

如果您最近升级到 PHPUnit 3.6,则可能您仍然安装了旧版本的 File_Iterator,这就是问题所在(基于对相同错误的模糊记忆)。

您可以通过以下方式检查已安装软件包的版本:

pear list -c pear.phpunit.de

如果有什么看起来不正确,或者只是为了确保升级 PHPUnit 以确保它是最新版本,所有依赖项也是如此:

$ 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.

检查包含路径

如果您安装了适当版本的 File_Iterator(和其他依赖项)并且缺少 File/Iterator/Autoload.php - 它没有安装在 php 正在寻找它的任何地方。使用pear list-files phpunit/File_Iterator 查看 pear 认为文件的确切位置 - 并验证文件是否存在。

如果是,那么梨根不在您的路径中,添加它就可以了。

【讨论】:

  • 问题(如您在答案中所见)是 phpunit 是 3.6.12 和 File_Iterator 1.3.1,与您的完全一样。但对我来说它不起作用。
  • C:\WAMP\PEAR\pear\File\Iterator\Autoload.php 存在。根据文档pear.php.net/manual/en/… php.ini 然后应该指向主 pear 文件夹(即 C:\WAMP\PEAR)。
  • 你应该在你的包含路径中有C:\WAMP\PEAR\pear。或者:any pear 包是否有效?听起来 PHPUnit 只是您使用 pear 依赖项的 cli 上的第一件事。
  • 你成就了我的一天。就像你说的:C:\WAMP\PEAR\pear 而不是 C:\WAMP\PEAR。非常感谢你指点我;)
【解决方案2】:

运行pear list -c pear.phpunit.de 看看你安装了什么。

你应该看到类似这样的输出:

Installed packages, channel pear.phpunit.de:
============================================
Package            Version State
File_Iterator      1.3.1   stable
PHPUnit            3.6.11  stable
PHPUnit_MockObject 1.1.1   stable
PHP_CodeCoverage   1.1.2   stable
PHP_Timer          1.0.2   stable
PHP_TokenStream    1.1.3   stable
Text_Template      1.1.1   stable

您可能缺少第一个(至少)。您可以检查并安装每个依赖项,但更简单的方法是 pear install -a pear.phpunit.de/PHPUnit-a 表示获取所有依赖项,即使您已经安装了 PHPUnit,它也可以工作。在上面的系统上运行它后,它将 PHPUnit 升级到 3.6.12 并添加了 PHP_Invoker,这似乎是我缺少的。

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

注意:-a 标志也有可选的依赖项。如果你是一个可能会打扰你的极简主义者:-)

【讨论】:

  • 根据pear list -c pear.phpunit.de我已经有File_Iterator!那么,怎么了?
  • 您是否尝试过pear install -a pear.phpunit.de/PHPUnit 命令(以root 身份)?如果什么都不需要更新,它将什么都不做。也许您的版本不匹配。
  • 感谢您的宝贵时间。我在 AD7six 答案中发现了错误。这是梨包含路径。
猜你喜欢
  • 2013-11-18
  • 1970-01-01
  • 2010-12-04
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2012-10-12
相关资源
最近更新 更多