Composer内容长度不匹配。

33
有时当我运行composer update来升级laravel项目时,可能会出现内容长度不匹配的异常。 最终,我发现这是因为中国的防火墙非常糟糕:DNS被污染了。 那么,如果你跟我一样,有没有办法解决这个问题呢?
11个回答

66

首先运行:

composer config --list --global          //this will get the composer home path.
[home] /root/.composer                   //it's my composer home path.

然后,编辑config.json文件,将其修改为如下内容:

{
  "config": {
    "github-protocols": [
      "https"
    ]
  },
  "repositories": {
    "packagist.org": {
      "type": "composer",
      "url": "https://packagist.org"
    }
  }
}

它将使packagist连接强制使用https。此外,您可以在项目中配置composer.json,这是一个Laravel示例,看起来像:

{
  "name": "laravel/laravel",
  "description": "The Laravel Framework.",
  "keywords": [
    "framework",
    "laravel"
  ],
  "license": "MIT",
  "type": "project",
  "require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.2.*"
  },
  "config": {
    "preferred-install": "dist"
  },
  "repositories": {
    "packagist.org": {
      "type": "composer",
      "url": "https://packagist.org"
    }
  }
}

更新

在Composer v1.2.3之前,Packagist的存储库键为"packagist"。在v1.2.3中,它已更改为"packagist.org"(请参见提交e38ebef)。


谢谢分享。对我很有用。你应该接受自己的答案! :-) - The Unknown Dev
这个答案在2019年7月2日对我也起作用了。 - Mycodingproject

35

只需更改Composer的默认存储库网址:

composer config -g repo.packagist composer https://packagist.org
composer config -g github-protocols https ssh

它更改或设置要仅使用https的packagist仓库。

这也可以修复与本地composer.json文件相关的任何问题。 无需在本地或全局破坏composer.json文件。


3

我尝试了被采纳的答案,但对我没有用,我还尝试了macbert的答案,但仍然有同样的问题,还试图卸载并重新安装composer。不管怎样感谢macbert和Alex Chiang,我找到了另一个解决方案。

我认为问题在于我的composer无法从packagist.org服务器下载数据,所以我将服务器更改为一个镜像。在cmd上运行以下命令切换到镜像(我从这里得到了这个镜像)

composer config -g repo.packagist composer https://repo-eu-uk-1.packagist.org

如果这个不起作用,可以尝试从https://packagist.org/mirrors中选择其他的镜像。

无论如何,我已经将相同的列表列在这里,即使您无法加载上面的链接。

  • Africa, South Africa

    composer config -g repos.packagist composer https://packagist.co.za
    
  • Asia, China

    composer config -g repos.packagist composer https://mirrors.huaweicloud.com/repository/php
    
  • Asia, China

    composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
    
  • Asia, China

    composer config -g repos.packagist composer https://php.cnpkg.org
    
  • Asia, China

    composer config -g repo.packagist composer https://packagist.phpcomposer.com
    
  • Asia, China

    composer config -g repos.packagist composer https://packagist.mirrors.sjtug.sjtu.edu.cn
    
  • Asia, China

    composer config -g repos.packagist composer https://mirrors.cloud.tencent.com/composer/
    
  • Asia, India

    composer config -g repo.packagist composer packagist.in
    
  • Asia, India

    composer config -g repos.packagist composer https://packagist.in
    
  • Asia, Indonesia

    composer config -g repos.packagist composer https://packagist.vrkansagara.in
    
  • Asia, Japan

    composer config -g repos.packagist composer https://packagist.jp
    
  • Asia, South Korea

    composer config -g repos.packagist composer https://packagist.kr
    
  • Asia, Thailand

    composer config -g repos.packagist composer https://packagist.mycools.in.th/
    
  • South America, Brazil

    composer config -g repos.packagist composer https://packagist.com.br
    

注意:我没有尝试所有的镜像站,如果一个不起作用,您可以逐个尝试。


2

我曾经遇到同样的问题,所以通过谷歌搜索来到这里。

我在本地机器和docker机器上都运行了composer命令。当运行composer install时,每台机器都出现了各种错误,包括Composer Content-Length Mismatch

我按照建议开始修改我的composer.json文件,然后意识到我的macbook丢失了wifi连接,就像它喜欢做的那样。此外,由于我正在旅行,网络质量很差。我还收到警告说我的本地机器上的composer已过期,而我本应该使用我的docker VM来发出命令。我的docker工作区容器已经一年没有更新了。

我恢复了wifi连接,在本地机器上升级了composer,composer install运行得非常好。我认为如果我升级docker配置,它也将在那里正常工作。


我也遇到过类似的问题,即使在可靠的宽带上也会出现。有些时候可能会被卡住,即使编辑系统的composer.json文件(确保最新版本正在运行)也没有任何作用。然而,第二天早上,运行相同的命令就没有错误了,这让我想知道是否有一些类型的ISP过滤和/或间歇性网络问题。 - karolus

2
composer config -g repos.packagist composer https://packagist.jp

1

我遇到了同样的问题,我做了两件事情

首先更新了composer,从1.4升级到了1.7

其次,将网络连接更改为高速。


0

根据Github源代码,可能会遇到一些相同的问题,您也可以使用它们。

composer self-update --snapshot

这可能会产生这样的结果:

enter image description here

但之后它会自动继续并下载


0

Laravel错误内容长度不匹配解决方案 只需要运行一些命令

Video thumbnail


0

在我的Windows机器上安装Laravel时,我遇到了同样的问题,我使用git bash运行以下命令。

composer global require "laravel/installer=~1.1"

然后我切换到普通的命令提示符,它就可以无错误地工作了。


0

通过升级zlib(1g)[deb]来解决相同的问题

(更准确地说,从trusty / 14.04到xenial / 16.04,两者都是LTS,当然;-)


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