更新Composer时出现错误

53

我在 Laravel-5.1 中有一个项目,我将我的平台从 Windows 10 更改为 Ubuntu。

显示错误:

正在加载包含软件包信息的 Composer 存储库

正在更新依赖项(包括 require-dev)

无法解析您的要求以安装一组可安装的软件包。

  Problem 1
- laravel/framework v5.2.9 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.8 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.7 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.6 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.5 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.4 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.31 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.30 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.3 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.29 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.28 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.27 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.26 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.25 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.24 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.23 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.22 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.21 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.20 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.2 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.19 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.18 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.17 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.16 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.15 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.14 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.13 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.12 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.11 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.10 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.1 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- laravel/framework v5.2.30 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
- Installation request for laravel/framework 5.2.* -> satisfiable by laravel/framework[v5.2.0, v5.2.1, v5.2.10, v5.2.11, v5.2.12, v5.2.13, v5.2.14, v5.2.15, v5.2.16, v5.2.17, v5.2.18, v5.2.19, v5.2.2, v5.2.20, v5.2.21, v5.2.22, v5.2.23, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.29, v5.2.3, v5.2.30, v5.2.31, v5.2.4, v5.2.5, v5.2.6, v5.2.7, v5.2.8, v5.2.9].

To enable extensions, verify that they are enabled in those .ini files:
- /etc/php/7.0/cli/php.ini
- /etc/php/7.0/cli/conf.d/10-mysqlnd.ini
- /etc/php/7.0/cli/conf.d/10-opcache.ini
- /etc/php/7.0/cli/conf.d/10-pdo.ini
- /etc/php/7.0/cli/conf.d/20-calendar.ini
- /etc/php/7.0/cli/conf.d/20-ctype.ini
- /etc/php/7.0/cli/conf.d/20-exif.ini
- /etc/php/7.0/cli/conf.d/20-fileinfo.ini
- /etc/php/7.0/cli/conf.d/20-ftp.ini
- /etc/php/7.0/cli/conf.d/20-gettext.ini
- /etc/php/7.0/cli/conf.d/20-iconv.ini
- /etc/php/7.0/cli/conf.d/20-json.ini
- /etc/php/7.0/cli/conf.d/20-mysqli.ini
- /etc/php/7.0/cli/conf.d/20-pdo_mysql.ini
- /etc/php/7.0/cli/conf.d/20-phar.ini
- /etc/php/7.0/cli/conf.d/20-posix.ini
- /etc/php/7.0/cli/conf.d/20-readline.ini
- /etc/php/7.0/cli/conf.d/20-shmop.ini
- /etc/php/7.0/cli/conf.d/20-sockets.ini
- /etc/php/7.0/cli/conf.d/20-sysvmsg.ini
- /etc/php/7.0/cli/conf.d/20-sysvsem.ini
- /etc/php/7.0/cli/conf.d/20-sysvshm.ini
- /etc/php/7.0/cli/conf.d/20-tokenizer.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

Composer/json。

{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
  "php": ">=5.5.9",
  "laravel/framework": "5.2.*",
  "infyomlabs/laravel-generator": "dev-master",
  "laravelcollective/html": "5.2.*",
  "infyomlabs/core-templates": "dev-master",
  "infyomlabs/swagger-generator": "dev-master",
  "jlapp/swaggervel": "dev-master",
  "doctrine/dbal": "~2.3",
  "infyomlabs/generator-builder": "dev-master",
  "yajra/laravel-datatables-oracle": "~6.0",
  "barryvdh/laravel-ide-helper": "^2.1",
  "infyomlabs/adminlte-templates": "dev-master"
},
"require-dev": {
    "fzaninotto/faker": "~1.4",
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "~4.0",
    "symfony/css-selector": "2.8.*|3.0.*",
    "symfony/dom-crawler": "2.8.*|3.0.*"
},
"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
"autoload-dev": {
    "classmap": [
        "tests/TestCase.php"
    ]
},
"scripts": {
    "post-root-package-install": [
        "php -r \"copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "php artisan key:generate"
    ],
    "post-install-cmd": [
        "Illuminate\\Foundation\\ComposerScripts::postInstall",
        "php artisan optimize"
    ],
    "post-update-cmd": [
        "Illuminate\\Foundation\\ComposerScripts::postUpdate",
        "php artisan optimize"
    ]
},
"config": {
    "preferred-install": "dist"
}


嗨@kkpatel,请提供一个最小的工作示例,展示你为解决问题所做的工作。 - Andy K
@Andy K 需要为php7.0安装mbstring、yum和xml,并在php.ini文件中进行更改。 - Ketan Akbari
那是詹姆斯给你答案,而不是你为了找到问题所做的事情。 - Andy K
10个回答

120

您的错误消息已经非常明确地说明了问题:

laravel/framework v5.2.9需要ext-mbstring *->所请求的PHP扩展mbstring在您的系统中丢失。

您的服务器上是否安装并启用了mbstring

您可以通过安装libapache2-mod-php5包来安装mbstring

sudo apt-get install libapache2-mod-php5

或者独立安装:

sudo apt-get install php-mbstring

安装它也会启用它,但是如果已经安装,您还可以通过编辑您的php.ini文件并删除注释它的;来启用它。

如果这是在您的本地机器上,则请按适当的步骤在您的环境中安装它。


如果我错了,请纠正我:并删除 ; 将其注释掉,你的意思是 取消注释,因为分号代表注释,对吗? - Saiyan Prince
@SaiyanPrince 我已经编辑了我的回答 - 但我的意思是说,目前在那里放置分号是将其注释掉。 - James
@James 感谢您提供澄清,但是您的编辑并没有做出任何改变。从我的角度来看,我仍然觉得不清楚。应该是取消注释而不是注释。 - Saiyan Prince
1
@SaiyanPrince “在这种情况下被注释掉的分号”是正确的英文表达。 - Chris
为什么Composer不会自动下载ext-mbstring库?我以为它是一个包管理器? - Adam
@Adam Composer是一个包管理器,而不是模块管理器。Ext-mbstring是一个PHP模块,您需要在服务器上安装和启用它,与安装在项目中的PHP包不同。 - James

45

对于PHP7,您可以这样做:

sudo apt-get install php-gd php-xml php7.0-mbstring

9
为了在 PHP 7.2 上使用,我使用了 sudo apt-get install php-gd php-xml php7.2-mbstring 命令。 - Dariux
2
终于了!非常感谢,亲切的先生。 - Zariweya

14

在php7.2 Ubuntu 18.04 LTS和ubuntu 19.04中

sudo apt-get install php-gd php-xml php7.2-mbstring

运作得像魔法一样


8

这个错误的快速解决方案

运行此命令

composer install --ignore-platform-reqs

该命令不考虑操作系统或平台。


1
它对我起作用了。Composer正在检查平台要求,但实际上这些要求已经得到满足。运行此命令后,一切都按预期工作。 - Buraco

7
如果您正在使用php 7.3进行laravel 5.7开发,这个方法适用于我。
sudo apt-get install php-gd php-xml php7.3-mbstring

这是我使用的唯一可行的方式,我正在使用:PHP版本7.2.24-1 + ubuntu16.04.1 + deb.sury.org + Laravel 5.8.35。 - LuizEduardoMPF

3
安装了给出的答案中的软件包后,我仍然遇到一些错误,然后我安装了以下软件包,它正常工作:
  • php-xml
如果需要特定版本:
  • php7.0-xml
适用于PHP 7.0的命令:
sudo apt-get install php7.0-xml

在某些情况下,您还需要安装一个包php7.0-common。与上述命令相同安装它。

这里似乎很重要的是PHP版本...我尝试了几次使用php-xml而不是php7.*-xml。 - Md. Mohaiminul Hasan

1

这对我来说适用于php 7.2

sudo apt-get install php7.2-xml


1
很多有关Ubuntu的好答案已经存在。我使用Linux,遇到了同样的问题,但上面的任何命令都没有对我起作用。
在Linux和php70上,我使用了以下命令,效果非常好:
sudo yum install php70-mbstring -y

1
问题:

Problem 1
    - laravel/framework v5.8.38 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
    - laravel/framework v5.8.38 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
    - laravel/framework v5.8.38 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
    - Installation request for laravel/framework (locked at v5.8.38, required as 5.8.*) -> satisfiable by laravel/framework[v5.8.38].

  To enable extensions, verify that they are enabled in your .ini files:
    - C:\xampp\php\php.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

解决方案:

如果您使用xampp,只需从中删除“;”
;extension=mbstring

在php.ini中,保存它,完成!

0
在php7.4中
sudo apt-get install php-gd php-xml php7.4-mbstring

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