【问题标题】:PHPUnit , PEAR upgrading ErrorsPHPUnit , PEAR 升级错误
【发布时间】:2012-02-15 12:33:39
【问题描述】:

注意:我已阅读有关此问题的所有问题

PEAR 已在我的系统(Ubuntu 11.10 + Apache/2.2.20)上安装和配置。因为

<?php
require_once 'System.php';
var_dump(class_exists('System', false));
?> 

返回这个:

bool(true)

(PEAR Manual : Checking if PEAR works Step 4)

当我尝试使用 phpunit 时出现此错误。

PHP Warning:  require_once(PHP/CodeCoverage/Filter.php): failed to open stream: No such file or directory in /usr/bin/phpunit on line 38
PHP Fatal error:  require_once(): Failed opening required 'PHP/CodeCoverage/Filter.php' (include_path='.:/usr/share/php:/usr/share/pear') in /usr/bin/phpunit on line 38

在这个错误之后我决定安装它

sudo /usr/bin/pear install phpunit/PHP_CodeCoverage

但我明白了

phpunit/PHP_CodeCoverage requires PEAR Installer (version >= 1.9.4), installed version is 1.9.2

使用sudo pear upgrade 升级 PEAR 时出现此错误

PHP Fatal error:  Call to undefined method PEAR_Registry::packageinfo() in /usr/share/php/PEAR/Dependency2.php on line 687

我不确定是什么问题?

附加

(command : result)

/usr/bin/pear config-get php_dir : /usr/share/php

Configuration File (php.ini) Path (on phpinfo();) : /etc/php5/apache2

php -c /etc/php5/apache2/php.ini -r 'echo get_include_path()."\n";' : .:/usr/share/php

pear upgrade pear : PHP Fatal error: Call to undefined method PEAR_Registry::packageinfo() in /usr/share/php/PEAR/Dependency2.php on line 687

PEAR 版本:已安装 1.9.2 和 php-pear 软件包。

【问题讨论】:

  • 您当前的 PEAR 版本是多少?你是用 apt-get 安装 php-pear 还是手动安装?
  • 梨版本:1.9.2。我已经安装了 php-pear
  • @cweiske , PHP Fatal error: Call to undefined method PEAR_Registry::packageinfo() in /usr/share/php/PEAR/Dependency2.php on line 687
  • @Eray:我发表了一篇关于如何在没有 PEAR 的情况下安装 PHPUnit 的文章。看看是否会帮助您重新启动 PHPUnit,无论哪种方式,您都可以告诉我您的想法吗?如果它有效,我想发布作为您问题的答案。 melikedev.com/2012/01/25/php-phpunit-use-phpunit-without-pear

标签: php ubuntu phpunit pear


【解决方案1】:

PEAR 1.9.2 已经过时并且已经无法使用更新的 pear 服务器基础架构进行修复。

我不知道为什么发行版仍然坚持使用刚刚损坏的东西:)

Install a new pear via go-pear.phar 并确保你有 pear version 1.9.4 然后强制 pear 使用忽略它的旧缓存文件

sudo pear install --force --alldeps phpunit/phpunit

摆脱老梨:

sudo apt-get purge php5-pear

现在

which pear

应该导致找不到命令。如果它仍然存在,请删除 /usr/share/php 中的二进制文件和相关的 php 类。

根据您的控制台历史,我会说您没有安装具有 sudo 权限的新梨,因此它登陆 /home/ 或 /usr/local/ 而不是默认系统位置。

只要你没关系

  • 除掉老梨
  • 将您的 php.ini include_path 更改为新的 pear 安装位置

【讨论】:

  • 我在安装 PEAR 时收到 Unknown Role class: "PEAR_Installer_Role_Pear_Installer_role_php 错误。你可以在这里查看:pastebin.com/jkH4AAkJ 你可以看到版本仍然是 1.9.2
  • 你在打stackoverflow.com/a/6596669/282601 - 先删除php-pear。
  • @cweiske ,这并不能解决我的问题。因为,dpkg -L php-pearpear config-get php_dir都是一样的,指向/usr/share/php
  • @cweiske no 我执行了这个命令:apt-get remove php-pear。然后通过 go-pear.phar 安装了一个新梨,但是它安装到了 /home/eray/pear/bin/pear 。我真的很困惑,完全。
  • @Eray 扩展了一点答案
【解决方案2】:

针对特定环境进行故障排除可能很困难......但是,这里是......

我在不使用实际的pear.phpunit.de 通道安装 PHPUnit 时遇到了问题,尤其是在尝试使用 apt-get 或 yum 之类的包管理器时。首先,您需要确保您的 pear 安装是最新的。从包管理器中终止现有安装:

  • sudo apt-get purge php5-pear

然后确保删除可执行二进制文件(如果它仍然存在)。这可能是/usr/bin/pear,但是你可能需要根据你的环境修改路径:

  • rm /usr/bin/pear

接下来通过下载 go-pear.phar 并执行它来安装新 pear。 确保使用 sudo 权限(或以 root 身份)安装它,以便将其安装在正确的位置

然后您可以通过执行下一个命令来验证 pear 是否有效。如果是这样,你会得到一个命令列表:

  • 梨帮助

最后,升级 pear(以防万一——毕竟您刚刚使用 go-pear.phar 获得了最新版本)。在此之后,确保您使用实际的 pear.phpunit.de 通道来安装 PHPUnit:

  • sudo pear 升级 PEAR
  • sudo pear config-set auto_discover 1
  • sudo pear install --alldeps pear.phpunit.de/PHPUnit

这对我来说效果很好......希望它有所帮助。

更新

要使 PHPUnit 的所有功能正常工作,您可能还需要执行以下操作:

  • sudo pear install pear.phpunit.de/PHPUnit_MockObject

你会认为 --alldeps 会涵盖这一点,但是......

更新 2

此方法不适用于当前的 Ubuntu 11.10,因为它 安装损坏的 pear 安装程序 1.9.2 ...

鉴于您使用 go-pear.phar 安装方法的持续问题,这是一种替代方法...

  • sudo apt-get install php-pear

接下来,告诉 PEAR 更新自己的频道。

  • sudo pear channel-update pear.php.net

然后,告诉 PEAR 将自己升级到最新版本。

  • sudo pear upgrade-all

最后,按照上面的规定安装 PHPUnit ...

  • sudo pear config-set auto_discover 1
  • sudo pear install --alldeps pear.phpunit.de/PHPUnit

【讨论】:

  • 最近我没有安装任何梨(我认为)。因为当我尝试执行pear/usr/bin/pear 命令时。我收到类似 pear is not installed 的错误。和所有其他命令,你说返回错误。我之前在我的问题中说过。
  • 我只是尝试再次安装它。安装时我将 /usr/bin 设置为我的 Binaries directory 。安装后我收到了** The 'pear' command is not currently in your PATH, so you need to ** use '/usr/bin/pear' until you have added ** '/usr/bin' to your PATH environment variable. 这个通知。然后我正在执行pear help/usr/bin/pear help 命令,但得到pear iisn't installedthere is no file like usr/bin/pear 错误。
  • @Eray 您只需要在环境路径中的某处引用 pear 即可。您可以按照此 SO 帖子中的说明进行操作:Ubuntu: How to link a binary
  • /usr/bin 上没有 pear 文件
  • 哦,好吧,我误会了。但是这个文件的内容应该是什么?为什么我们用 phar 安装 pear 时会自动创建它?
【解决方案3】:

我通过manual installation 开始工作。

【讨论】:

  • 1.9.4(在 Q 底部说),但手动安装不需要使用任何 pear。
  • 我收到PHP Fatal error: Class 'PHPUnit_TextUI_Command' not found in /usr/share/php/phpunit/phpunit.php on line 46 错误。
  • @Eray:phpunit 是自己运行的,还是在尝试运行测试时出现错误?我发现我的测试课实际上有一个错误,但phpunit 本身很好。实际上,我不认为您的 phpunit.php 应该 包含对该类的引用...您的 phpunit.php 是什么样的?
  • 当我尝试仅启动 phpunit 命令时出现此错误。我没有尝试任何 php 文件。
  • @Eray:你确定你周围没有一些旧的 phpunit 代码吗?试试which phpunit 并确保它运行正确。
【解决方案4】:

我刚刚升级了我的 Ubuntu 系统,并且获得了稳定的 PEAR 1.9.4。运行

sudo apt-get update
sudo apt-get upgrade

让您的 Ubuntu 同步并保持最新状态。

如果您仍然在上面的版本中苦苦挣扎,我的建议是安装与您的 phpunit 兼容的 PHP_CodeCoverage 的早期版本。在我升级我的系统之前,我安装了 phpunit-3.5.15(稳定)、PHP_CodeCoverage 1.0.5(稳定)和 PEAR 1.9.2。如果这是你的 phpunit 版本

sudo pear install PHP_CodeCoverage-1.0.5

应该使用 PEAR 1.9.2 安装 PHP_CodeCoverage。

我希望这对您有所帮助,并让您的单元测试运行起来。

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 2011-09-29
    • 1970-01-01
    • 2012-01-12
    • 2018-10-25
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多