Composer更新:缺少请求的PHP扩展ext-http

Mat*_* VM 9 php symfony composer-php

我正在使用symfony框架和作曲家创建一个php网站。

  • 作业系统:Windows 10
  • PHP版本:7.3.2
  • Symfony:4.2.3(env:开发,debug:真)
  • 作曲者:1.8.4(2019-02-11)

当我尝试compose update在项目文件夹中执行操作或尝试使用安装软件包时composer require symfony/swiftmailer-bundle,出现以下错误:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - The requested PHP extension ext-http * is missing from your system.
      Install or enable PHP's http extension.
Run Code Online (Sandbox Code Playgroud)

(它说“问题1”,但这是列出的唯一问题。)

我已经在我的php.ini文件中寻找扩展名,但是找不到。我需要手动安装扩展程序吗?如果是这样,我在哪里可以找到它?

提前致谢!

Mat*_* VM 10

找到解决方案。由于某种原因我被composer.json收容了"ext-http": "*"。

"require": {
    "ext-http": "*"
}
Run Code Online (Sandbox Code Playgroud)

删除此行可解决此问题。我不知道为什么它包含"ext-http": "*"而且我不完全理解为什么删除它可以解决问题。(是因为它正在寻找扩展名,但找不到它吗?)

(感谢所有试图帮助我解决问题的人!)

  • `composer.json` 中的 `ext-http` 只是表明 Composer 项目(或库)依赖于 `ext-http` 提供的功能。删除该行并不一定能解决问题 - 它只会使警告消失,但使用 ext-http 功能的代码仍然会中断 - 最有可能在非常特定的情况下。顺便说一句,这种情况也适用于其他扩展。Composer 并不真正知道您的代码/项目是否使用依赖项 - 这适用于“ext-”以及正常的依赖项。 (17认同)
  • 这个“答案”应该被否决 23 次,而不是被赞成。这个“答案”并不能解决问题。 (5认同)
  • 这也被添加到我的 `composer.json` 中。PhpStorm 添加它以消除代码警告。我想知道你是否使用 Phpstorm? (2认同)
  • @emix 别对他太严厉,他只是隐藏了问题,甚至没有试图解决它 (2认同)

Fra*_*eni 9

php-http是由不同的包实现的标准。ext-http是 Composer 方式来告诉您的应用程序至少需要这些包之一。有关其他详细信息,请参阅http://docs.php-http.org/en/latest/clients.html 上名为“Composer 虚拟包”的部分。

与其他软件包不同的是,这些ext-...行实际上并没有通过 composer 安装任何东西,它们只是让 composer 检查您是否有一些必需的依赖项。通常你可以只安装相应的PHP库,例如ext-zip意味着你需要安装php-zip. 在这种情况下,没有单一的 PHP 库,而是一系列兼容的库。

您应该能够通过安装提供的软件包之一来解决您的问题,例如

composer require php-http/curl-client
Run Code Online (Sandbox Code Playgroud)

  • @YesBarry我知道。在我的回答中,我指出“ext-http”是告诉 Composer 您的应用程序需要“php-http”兼容实现的通用方法。我相应地扩展了我的答案。当然,如果删除该行,依赖关系就会消失,但如果您确实想满足环境中的“ext-http”要求,我的答案仍然有效。 (6认同)
  • “ext-http”和“php-http”之间没有关系。对于 Composer 来说,所有以“ext-”开头的包都不是用户态包,而是扩展。有一个元包“php-http/client-implementation”,由“php-http/curl-client”提供。 (4认同)
  • 这是不可能的,因为我无法运行 ```composer require``` 命令。 (2认同)
  • 他指的是“ext-http”而不是“php-http” (2认同)
  • 您正在“ext-http”和 HTTPlug 之间创建关系,并指示 php-http/curl-client 将满足“ext-http”的要求。正如偷偷摸摸的尝试过的那样,情况并非如此。事实上 php-http/curl-client 只是满足 php-http/client-implementation 的要求。 (2认同)

sh6*_*210 5

就我而言,我使用的是 ubuntu,希望这能解决这个问题。

sudo apt install php-http
Run Code Online (Sandbox Code Playgroud)