无法运行composer install

9

我正在尝试在我的项目中运行composer install,但是出现了以下错误

[Composer\Downloader\TransportException]
The "http://packagist.org/p/provider-2013$43e3f41fbe30a46245103451248f688a727f076a6e90636d19a69a156c17a416.json" file could not be downloaded (HTTP/1.1 400 Received invalid request from Client)

我尝试运行 composer self-update,但出现了以下错误

[Composer\Downloader\TransportException]
The "https://getcomposer.org/version" file could not be downloaded: Failed to enable crypto failed to open stream: operation failed

我正在使用代理运行Ubuntu 15.04,apache/php5.6.4/mysql。

我尝试下载http://curl.haxx.se/ca/cacert.pem并更新了我的php.ini文件如下:

curl.cainfo=/etc/ssl/certs/cacert.pem
openssl.cafile=/etc/ssl/certs/cacert.pem
openssl.capath=/etc/ssl/certs

运行composer diagnose会返回以下内容:
Checking composer.json: OK
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity to packagist: FAIL
[Composer\Downloader\TransportException] The "http://packagist.org/packages.json" file could not be downloaded (HTTP/1.1 400 Received invalid request from Client)
Checking https connectivity to packagist: OK
Checking HTTP proxy: OK
Checking HTTP proxy support for request_fulluri: FAIL
Unable to assess the situation, maybe packagist.org is down (The "http://packagist.org/packages.json" file could not be downloaded (HTTP/1.1 400 Received invalid request from Client))
Checking HTTPS proxy support for request_fulluri: OK
Checking github.com rate limit: OK
Checking disk free space: OK
Checking composer version: FAIL
You are not running the latest version

最后,openssl_get_cert_locations()返回以下内容:
  • default_cert_file: /usr/lib/ssl/cert.pem
  • default_cert_file_env: SSL_CERT_FILE
  • default_cert_dir: /usr/lib/ssl/certs
  • default_cert_dir_env: SSL_CERT_DIR
  • default_private_dir: /usr/lib/ssl/private
  • default_default_cert_area: /usr/lib/ssl
  • ini_cafile: /etc/ssl/certs/cacert.pem
  • ini_capath: /etc/ssl/certs
我完全不知道问题在哪里,更不知道如何调试。
希望有人能帮助我!
9个回答

6

我和你一样。我在网上找到了解决方法(适用于Windows 10)。 1 - 进入文件夹PATH\xampp\apache,并运行makecert.bat 2 - 将此脚本添加到composer.json文件中

"repositories": [
        {
            "type": "composer",
            "url": "https://packagist.org"
        },
        {
            "packagist": false
        }
    ]

2
谢谢,你刚刚救了我!我在我的愚蠢的Windows 10机器上花了两个晚上寻找解决方案,直到现在都没有希望。我会在网络上传播你的答案,希望它能帮助其他人。 - MAZux
很高兴能帮助你。 - Bai Nguyen

2
问题很可能与某种形式的HTTPS强制执行有关,因为从上面的composer diagnose中可以看出,HTTP连接性测试失败,而HTTPS测试通过了。
Checking HTTP connectivity to packagist: FAIL
...
Checking HTTP proxy support for request_fulluri: FAIL
...
Checking HTTPS proxy support for request_fulluri: OK

运行下面的代码片段(强制在composer上使用HTTPS)解决了我的问题:
composer config -g repo.packagist composer https://packagist.org

解决方案源代码


1
如果您是Linux(Ubuntu)用户,则执行以下命令以解决问题:
php -r "print_r(openssl_get_cert_locations());"

wget http://curl.haxx.se/ca/cacert.pem

sudo mv cacert.pem /usr/lib/ssl/certs/cert.pem // Note: Create the cert.pem file under certs folder if does not exist.

Kamlesh,请问您能解释一下第一步吗——如果要替换路径,为什么要检查openssl证书的现有位置呢? 或者我应该用wget的输出替换php命令显示的任何路径? - Scott Anderson

0

尝试运行 php composer global self-update


0

也许你可以尝试更改代理。

http://composer-proxy.jp/

这里有一个来自日本的代理。希望它能对你有用。


0
如果是Linux系统 - 停止iptables服务,或者在Windows上关闭杀毒软件和防火墙。

0

尝试使用composer global self-update 1.4.1命令


1
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

0
如果以上方法都无法解决问题,请尝试删除系统设置中的http_proxy环境变量,具体操作为:打开“环境变量”设置。

0

在环境中设置代理,在终端中使用以下命令:

export http_proxy=<proxy>:<port>
export https_proxy=<proxy>:<port>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接