【问题标题】:PHPUnit: Warning: require(PHPUnit/Autoload.php): failed to open stream: No such file or directory in /usr/local/bin/phpunit on line 42PHPUnit:警告:需要(PHPUnit/Autoload.php):无法打开流:第 42 行的 /usr/local/bin/phpunit 中没有这样的文件或目录
【发布时间】:2011-11-30 21:37:03
【问题描述】:

运行时

  • phpunit

我收到错误

Warning: require(PHPUnit/Autoload.php): failed to open stream: No such file or directory in /usr/local/bin/phpunit on line 42

Fatal error: require(): Failed opening required 'PHPUnit/Autoload.php' (include_path='.:') in /usr/local/bin/phpunit on line 42

/usr/local/bin/phpunit 在第 42 行显示以下内容:

require 'PHPUnit/Autoload.php';

有什么建议可以解决这个问题吗?

更新(1):

我在 /etc/ 中缺少 php.ini,因此我将其符号链接以读取 MAMP php.ini。现在我明白了

php -r 'foreach (explode(":", get_include_path()) as $path) echo $path . PHP_EOL;'
.
/Applications/MAMP/bin/php/php5.3.6/lib/php
/usr/local/bin/pear
/usr/local/share/pear/PHPUnit

运行

  • phpunit

正在运行但不提供输出。

有什么建议接下来要检查什么吗?

更新(2):

这个问题的根本原因可能与问题有关

【问题讨论】:

    标签: phpunit osx-lion mamp


    【解决方案1】:

    我在 MAC OSX Lion 上遇到了类似的问题。我用 PEAR 包管理器安装了 phpunit,当我尝试运行它时,我得到了 udo 描述的错误。我可以通过以下简单步骤解决它:

    1. 获取梨的最新php存档curl http://pear.php.net/go-pear.phar > go-pear.php
    2. 使用sudo php -q go-pear.php 安装存档

    在安装过程中,它会检测 php.ini 中的 include_path 是否不包含 PEAR PHP 目录。您可以选择让它在给定选项时自动为您修复。

    【讨论】:

    • 很酷,谢谢,我想补充一点,在这些步骤之后,我不得不使用以下命令再次安装 phpunit:sudo pear channel-discover pear.phpunit.de sudo pear channel-discover components。 ez.no sudo pear channel-discover pear.symfony-project.com sudo pear install phpunit/PHPUnit
    • 相同,谢谢 - 更新命令 -- $ sudo pear channel-discover pear.phpunit.de; sudo pear channel-discover components.ez.no; sudo pear channel-discover pear.symfony.com; sudo pear install phpunit/PHPUnit
    • 我认为 PHPunit 正在完全远离 PEAR。有没有办法让 VPU 与安装了 composer 的 PHPUnit 版本一起工作?
    • 注意:URL 现在使用 https (curl http://pear.php.net/go-pear.phar > go-pear.php)。我会编辑答案,但这至少需要更改 6 个字符。
    【解决方案2】:

    当我从本地目录运行phpunit.phar 时遇到了这个问题,但我还安装了 PHPUnit 作为 composer 依赖项。删除 PHPUnit composer 依赖解决了我的问题。

    【讨论】:

      【解决方案3】:

      您的PHP include path 上必须有包含PHPUnit 源文件的文件夹。此外,PHPUnit/Autoload.php 是在 3.6 中添加的,您可能有一个较旧的 3.5.x 源文件夹。检查使用列出的文件夹

      php -r 'foreach (explode(':', get_include_path()) as $path) echo $path . PHP_EOL;'
      

      (或在 Windows 上)

      php -r"foreach (explode(':', get_include_path()) as $path) echo $path . PHP_EOL;"
      

      并确保其中一个包含带有Autoload.phpPHPUnit 文件夹。

      更新:关于您的更新,您可能希望从包含路径中删除 /usr/local/share/pear/PHPUnit,因为您包含的 PHPUnit/Autoload.php 应该位于 /usr/local/share/pear 中,而 /usr/local/share/pear 已经在包含中路径。

      要确保 PHPUnit 正常工作,首先运行phpunit --version,以便您可以看到已安装的版本。 PHPUnit 在输出任何东西之前实例化它计划运行的所有测试用例。如果您的任何测试用例在加载时导致致命错误,有时根本不会显示任何输出。这非常令人沮丧。首先创建不使用任何代码的最简单的测试用例。

      class MyTest extends PHPUnit_Framework_TestCase {
          function testThatItWorks() {
              self::assertTrue(true);
          }
      }
      

      运行此测试应该会产生一个通过测试。试一试并粘贴您在问题中看到的内容。

      【讨论】:

      • 谢谢。根据您的输入,我能够采取另一个步骤让 phpunit 正常工作。您对“Update(1)”有什么建议吗?
      • 抱歉没有注意到更新...我意识到我应该使用 MAMP 来执行此操作并遇到stackoverflow.com/questions/8375327/mamp-unable-to-upgrade-pear。我想我的问题与此有关......
      【解决方案4】:

      要添加到以前的答案:仔细检查 php.ini 文件是否正在加载,并确保使用其他路径编辑该文件。我使用以下内容检查加载的 php.ini

      php -r 'phpinfo();'
      

      这告诉我加载的 php.ini 文件是 /private/etc/php.ini

      然后我用“which”告诉我 phpunit 安装在哪里:

      which phpunit
      

      然后我将该路径添加到 php.ini 文件中,所以它最终看起来像这样:

      ;***** Added by go-pear
      include_path=".:/Users/admin/pear/share/pear:/php/includes:/usr/bin:/usr/lib/php/"
      

      只有在我完成所有操作后,“phpunit --version”和其他命令才能按预期工作。

      【讨论】:

      • 你可以做 php -i 而不是调用 phpinfo()
      • "添加到这个" -- 添加到什么?
      【解决方案5】:

      需要注意的是,大部分用户遇到这里遇到的问题,一定是运行命令

      $ phpunit

      在命令提示符下。当他们收到上述错误时。对于真正的问题,我们大多数人都无法理解的是,在命令提示符下使用的 PHP 与在您的网络服务器中为您运行的 PHP 将大不相同。我个人使用的是lampp,即使我已经成功地使用pear正确安装了phpunit,我几个小时都没有意识到这个重要的部分。

      补救措施 - 在任何时候您需要运行需要 include_path 中资源的 PHP 脚本时,请确保您使用的相应 PHP 二进制文件的 php.ini 已充分配备。在我的 ubuntu 12.04 安装中使用 xampp 我的两个 php 二进制文件包括

      • 命令行一,即/etc/php5/cli/目录下的php5-cli
      • xampp 一个,即 apache 使用的 php 来服务我在 /opt/lampp/etc/php.ini 中找到的页面

      两个 php.ini 文件都必须具有您想要的正确 include_path 声明,以便您正确引导任何命令行脚本和服务器端(apache 服务脚本)。

      正确配置php.ini后回到我们手头的事情记住

      • 重新启动 Apache 以便网络服务器选择您的更改
      • 重新启动终端/命令行会话,以便 cli 提示符选择您的更改

      在 Linux/*nix 系统中更改文件时遇到问题的常见错误

      • 记得运行 chwon 来拥有 php.ini 文件,否则你甚至无法编辑它们

      • 记得运行 chmod 并更改值以允许您保存更改,之后您可以将所有内容(对文件的访问控制,即 chwon 和 chmod 恢复到以前的状态)到它们应该是的状态重启终端和apache后就ok了。

      祝你好运

      【讨论】:

        【解决方案6】:

        Howard Lo 在 Mac OSX 上的评论非常有用 Sebastian Perez 的评论。由于该注释的格式不是很好,因此可能会被忽略。在 OSX 的 Mavericks 更新后,我第二次运行这个问题,U 决定为这个问题创建这个完整的 Apple OSX 解决方案。不得不说我也安装了几个不同版本的php的MAMP-PRO,所以我需要非常准确。

        1. 检查您是否在 /private/etc 中安装了 php.ini。如果没有发出命令:

          $ sudo cp /private/etc/php.ini.default /private/etc/php.ini

        2. 获取pear最新的php存档

          $ curl http://pear.php.net/go-pear.phar > go-pear.php

        3. 安装存档

          $ sudo php -q go-pear.php

        4. 在安装过程中,它会检测 php.ini 中的 include_path 是否不包含 PEAR PHP 目录。您可以选择让它在给定选项时自动为您修复。

        5. 在这些步骤之后,我不得不使用以下命令再次安装 phpunit:

          $ sudo pear channel-discover pear.phpunit.de

          $ sudo pear channel-discover components.ez.no

          $ sudo pear channel-discover pear.symfony-project.com

          $ sudo pear install phpunit/PHPUnit

        非常感谢 Howard Lo 和 Sebastian Perez。

        【讨论】:

          猜你喜欢
          • 2012-03-27
          • 2019-07-27
          • 1970-01-01
          • 1970-01-01
          • 2014-02-17
          • 2023-04-04
          • 2014-10-07
          • 2013-09-04
          相关资源
          最近更新 更多