自动加载的HTTP / Request2代码中的错误,如何解决作曲家的问题?

时间:2017-07-14 03:47:56

标签: composer-php

我有两个不同的系统,其上克隆了一个git存储库 该项目使用composer来安装各种依赖项 其中一个是pear/HTTP_Request2,需要Net/URL2 这两个系统都是带有xampp开发环境的Windows。因此,两者都使用PHP 7.1。*安装运行Apache2。

其中一个在通过composer install安装后一切正常。但另一个总是在自动加载的HTTP / Request2代码中出错:

<b>Warning</b>:  require_once(Net/URL2.php): failed to open stream: No such file or directory in <b>C:\xampp\htdocs\XXX\vendor\pear\http_request2\HTTP\Request2.php</b> on line <b>25</b><br />
<br />
<b>Fatal error</b>:  require_once(): Failed opening required 'Net/URL2.php' (include_path='C:\xampp\htdocs\XXX\vendor/pear/pear_exception;C:\xampp\htdocs\XXX\vendor/pear/http_request2;C:\xampp\php\PEAR') in <b>C:\xampp\htdocs\XXX\vendor\pear\http_request2\HTTP\Request2.php</b> on line <b>25</b><br />

查看Package中的代码,我们发现:

if (!class_exists('Net_URL2', true)) {
    require_once 'Net/URL2.php';
}

根据作曲家的输出判断,NetURL2的依赖关系已成功安装。

尽管我从一个错误(长期关闭但仍然)听到有关该问题的错误(Issue@composer git之后我还要求项目中的HTTP / Request2 "pear/net_url2" : "^2.2.0",依赖,我还试图修复它。 ),这没有导致变化。

根据检查过的代码判断,我也认为this question已过时。

现在我不知道下一步该做什么......帮忙?

编辑: 如果有人想知道我的composer.json基本上是这样的:

{
"require":
  {
    "php":">=7.1.4",
    "pear/http_request2": "v2.3.0",
    "ext-json":"1.5.0",
    "ext-PDO":"7.*",
    "ext-pdo_mysql":"7.*",
    "ext-mbstring":"7.*",
    "ext-gd":"7.*"
  },
  "autoload": {
    "files": [
      "helper.php",
      "settings.php"
    ],
    "classmap": ["./"],
    "exclude-from-classmap": ["vendor/"]

  }
}

1 个答案:

答案 0 :(得分:0)

要解决 Composer 的问题,您可以添加-vvv标记以获取详细信息。

其次,当您安装了PHP XDebug扩展程序时,每次发生致命错误时,您都会看到调用堆栈

注意:运行phpenmod -s cli xdebug以在CLI模式下启用XDebug。

pear/http_request2 package(根据vendor/pear/http_request2/HTTP/Request2.php)尝试包含Net/URL2.php文件(pear/net_url2的一部分,完整路径:vendor/pear/net_url2/Net/URL2.php时发生致命错误)。

此路径通常应由Composer添加到include_paths.php中,如:

vendor/composer/include_paths.php:    $vendorDir . '/pear/net_url2',

未能这样做。要再次生成自动加载文件,请运行以下命令:

composer dump-autoload -o

并检查vendor/composer下的自动加载文件是否按预期生成。

为了测试它,我运行了这个PHP命令并且它有效:

php -r 'require_once "vendor/autoload.php"; require_once "vendor/pear/http_request2/HTTP/Request2.php";'

注意:要查看失败的方案,请删除autoload.php的包含。