【问题标题】:How to properly require a phar file如何正确要求 phar 文件
【发布时间】:2015-03-30 12:05:21
【问题描述】:

phpunit 已停止支持 PEAR 安装。这导致我们需要继续使用 phpunit 的 phar 安装。我们有一个包装脚本,它遍历许多目录并调用这些目录上的 phpunit 可执行文件。然后包装脚本将所有生成的报告合并到一个报告中。

当 phpunit 与 PEAR 一起安装时,我们需要在包装脚本顶部的唯一要求是

require 'PHP/CodeCoverage/Autoload.php';

然后,当包装脚本执行诸如

之类的操作时
$writer = new PHP_CodeCoverage_Report_Clover();
$writer->process($codeCoverage, "${reportsDir}/clover-coverage.xml");

自动加载器会(大概)加载执行此代码所需的任何内容,然后我们会继续我们愉快的方式。

然而,自从迁移到 phar 安装后,事情变得一团糟。最初我以为我可以只需要 phar 文件本身,一切都会好起来的。

require 'phpunit-3.7.31.phar';

但是,这会导致 phar 文件在 require 行被命中后立即执行,从而中止包装脚本和 phpunit 使用输出。由于您不能在 php require 语句中使用通配符,因此我慢慢构建了完成包装脚本所需的文件列表,并像这样要求它们:

require 'phar://phpunit-3.7.31.phar/php-code-coverage/CodeCoverage/Report/Clover.php';

当我从它的目录执行包装脚本并且 phpunit.phar 文件位于同一目录中时,这有效。但是,尝试从不同的目录执行它会失败,说在包含路径上找不到 phar 文件。我试图更改包含路径,将 .phar 文件放在包含路径上已经存在的位置,并在包含中给出 phar 文件的绝对路径,例如:

require 'phar://actual/path/to/file/phpunit-3.7.31.phar/php-code-coverage/CodeCoverage/Report/Clover.php';

这些解决我的问题的尝试都没有奏效。

如何包含 .phar 文件中的文件,以使我可以从系统上的任何位置运行脚本?

另一个可接受的答案是让我使用 phar 文件中的类而不包括我需要的所有内容。

Ubuntu 12.04

PHPUnit 3.7.31(我们必须继续使用这个版本,但这并不会真正影响问题)

【问题讨论】:

  • 为什么不直接打开包装?

标签: php phpunit require phar


【解决方案1】:

PHPUnit 的 PHAR 只能作为 PHPUnit 4.2 的库正确使用。

还可以查看 PHPCOV 以合并来自多次运行的代码覆盖率数据。

【讨论】:

  • 我正在尝试使用 PHPCOV,但它似乎不喜欢 phpunit 3.7.31 生成的 .cov 文件。您能否确认 phpcov 是否可以使用 phpunit 3.7.31 中的 .cov 文件?
  • 不,PHPCOV 不支持 PHPUnit 3.7。您需要 PHPUnit 4 才能使 PHPCOV 正常工作。请注意,PHPUnit 项目不再积极支持 PHPUnit 3.7。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 2019-09-07
  • 2015-09-25
  • 2017-03-09
  • 2014-12-27
  • 2015-08-29
  • 2015-03-06
相关资源
最近更新 更多