我有两个不同的系统,其上克隆了一个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/"]
}
}
答案 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
的包含。