【问题标题】:Composer install error - requires ext_curl when it's actually enabledComposer 安装错误 - 实际启用时需要 ext_curl
【发布时间】:2013-10-20 13:07:43
【问题描述】:

我正在尝试使用 Composer 安装 Facebook PHP SDK。这就是我得到的

$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

    Problem 1
        - Installation request for facebook/php-sdk dev-master -> satisfiable by facebook/php-sdk[dev-master].
        - facebook/php-sdk dev-master requires ext-curl * -> the requested PHP extension curl is missing from your system.

问题是,我启用了 curl 扩展(在 php.ini 中未注释)。当我运行phpinfo() 时,它说它已启用。 我唯一的线索是,当我运行$ php -m 时,'curl' 行不见了,但我不知道该怎么办。

我在 Win8 上有 wamp 2.4,我在 cmd.exe 中运行 composer。

【问题讨论】:

  • 运行“php -i | grep php.ini”以确保您正在为 PHP 编辑正确的 ini 文件?
  • Composer 会询问当前运行的 PHP 的扩展,这是 PHP 的命令行版本,而不是服务器版本。如果那个 PHP 没有 curl 扩展,它将无法工作。这可能是 Composer 目前实现的一个缺点,因为抓取远程包不需要扩展,而且用来抓取包的服务器一定不是用来执行东西的服务器。

标签: php windows curl facebook-php-sdk composer-php


【解决方案1】:

如果您收到类似php7.2-curl 没有可安装的候选或找不到任何包或依赖项的错误是php7.2-commonlibcurl3 这样做

你必须以成熟的方式应对。 Install aptitude 这些 ubuntu 包管理器会找到所有依赖项,并会一一安装。

apt-get install aptitude

现在你必须检查 aptitude 是否可以下载它是否按照说明下载

sudo aptitude install php7.2-curl

如果你遇到这样的错误

E: Unable to locate package php7.2-curl
E: Couldn't find any package by glob 'php7.2-curl'

任何类型的错误我都不是在谈论正确的这些错误

再次尝试添加php包

sudo apt-add-repository ppa:ondrej/php

sudo apt-get update

现在试试这个命令

sudo aptitude install php7.2-curl

Aptitude 会询问您是否要保留所有依赖项的当前版本

The following actions will resolve these dependencies:

     Keep the following packages at their current version:
1)     php7.2-curl [Not Installed]                        



Accept this solution? [Y/n/q/?]

输入n,然后输入Enter

Aptitude 将查找所有依赖项并要求您安装所有包类型

y

再次

y

然后

systemctl restart apache2

对于 rhel 的 centos

systemctl restart httpd

默认情况下不会启用 PHP 7.2 FPM。 注意:要在 Apache2 中启用 PHP 7.2 FPM,请执行

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

这个方法不仅是针对这个错误你可以找到任何使用aptitude的php apache2或ubuntu系统包解决方案。

Upvote if you find your solution

【讨论】:

  • 请不要在不检查是否与给定问题匹配的情况下多次发布相同的答案。 sudo apt-add-repository ppa:ondrej/php 不添加任何包,当在 Windows 8 上使用 WAMP 并已启用 cURL 扩展时,这甚至不起作用
【解决方案2】:

这是因为您的系统中没有安装库 php5-curl,

在 Ubuntu 上,只需简单地运行下面的行代码,在 Xamp 上,请查看 Xamp 文档

sudo apt-get install php5-curl

对于任何使用 php7.0 的人

sudo apt-get install php7.0-curl

对于使用php7.1的人

sudo apt-get install php7.1-curl

对于使用php7.2的人

sudo apt-get install php7.2-curl

对于使用php7.3的人

sudo apt-get install php7.3-curl

对于使用php7.4的人

sudo apt-get install php7.4-curl

对于使用php8.0的人

sudo apt-get install php8.0-curl

或者简单地运行下面的命令来安装你的版本:

sudo apt-get install php-curl

【讨论】:

  • 该问题的作者似乎正在运行 Windows。 Windows 不是基于 Debian。
  • @huertanix 尽管用户的系统正在运行,但问题错误是因为系统上未安装 curl 库,这可能导致作曲家错误,我指出的只是一个示例,以阐明用户如何解决这个问题。
  • 在 ubuntu 16 和 php 5.6 你应该使用 sudo apt-get install php5.6-curl
  • 用这个“sudo apt-get install php-curl”解决了
  • php-curl 是一个元包,它使解决方案独立于 php 版本。所以“sudo apt-get install php-curl”是通用答案
【解决方案3】:

不知道为什么使用 Linux 命令的答案会在与 Windows 相关的问题上获得如此多的赞成票,但无论如何......

如果 phpinfo() 显示 Curl 已启用,但 php -m 未启用,则表示您可能也有 php-cli.ini。运行 php -i 并查看加载了哪个 ini 文件。如果不同,请在 CLI ini 文件中对其进行比较并反映和差异。那你应该很高兴了。

顺便下载并使用 Git Bash 而不是 cmd.exe!

【讨论】:

    【解决方案4】:

    尝试使用下面的 sn-p 安装 php5-curl。

    sudo apt-get install php5-curl
    

    如果它不起作用,请尝试下面的代码,我相信它会正常工作。

    sudo apt-get install php-curl
    

    对我来说它有效...一切顺利:)

    【讨论】:

    • sudo apt-get install php-curl ,在 ubuntu 上为我工作
    【解决方案5】:

    对于在 Windows 上遇到此问题的任何人,我根本无法在谷歌上找到我的答案。 我刚刚尝试运行 composer require ext-curl 并且成功了。 或者在您的 composer.json 文件中添加以下内容:

    "require": {
    "ext-curl": "^7.3"
    }
    

    【讨论】:

    • 请分享更多细节,以便其他人学习。如果 Composer 抱怨 ext-curl 已经丢失,如何将其添加到 composer.json 解决问题?这不会神奇地安装 cURL(因为 Composer 不会安装扩展)
    【解决方案6】:

    在我的情况下,我从 PHP5 迁移到 PHP7 并且出现了这个错误, 只需转到您的 /bin/php/php7/php.ini ,然后取消注释 extension=php_curl.dll 并重新启动您的服务器,重新运行您的作曲家安装。

    【讨论】:

      【解决方案7】:

      我有带有 php 7.2 的 Archlinux,它集成了 Curl,所以再多的配置 voodoo 也不会让 Composer 看到 ext-curl,PHP 可以看到并愉快地工作。解决方法是将 Composer 与 --ignore-platform-reqs 一起使用。

      例如 composer update --ignore-platform-reqs

      参考 = https://github.com/composer/composer/issues/1426

      【讨论】:

        【解决方案8】:

        在 php 7 中启用试试下面的命令

        sudo apt-get install php7.0-curl
        

        【讨论】:

          【解决方案9】:

          升级到 PHP5.6 后我遇到了这个问题。我的答案与阿德里亚诺的非常相似,除了我必须运行:

          sudo apt-get install php5.6-curl
          

          注意“5.6”。安装 php5-curl 对我不起作用。

          【讨论】:

            【解决方案10】:

            以php7为例:

            > sudo apt-get install php-curl
            > sudo apt-get install php-mbstring
            

            对于每个缺少的扩展。那么:

            > sudo apt-get update
            

            最后(在项目的根文件夹中):

            > composer install
            

            【讨论】:

              【解决方案11】:

              如果使用 wamp 转到:

              wamp\bin\php\php.5.x.x\php.ini 找: ;extension=php_curl.dll 删除 (;)

              【讨论】:

                【解决方案12】:

                我在尝试安装 Dropbox SDK 时遇到了同样的问题。

                我的系统上确实启用了 CURL,但这意味着 wamp\bin\apache 文件夹中的 php.ini。

                我只需要手动编辑位于 wamp\bin\php 中的 php.ini,取消注释 extension=php_curl.dll 行,重新启动 Wamp 即可完美运行。

                为什么有这 2 个 php.ini 而只使用了一个对我来说仍然是个谜......

                希望对某人有所帮助!

                【讨论】:

                • 一个 php.ini 由 WAMP 中的 Apache 使用,另一个在启动内置 PHP Web 服务器时使用,如下所示:$ php -S localhost:8000 在控制台中
                • 谢谢你,它工作得很好!!不明白为什么要检查 php_curl 并在 php.ini 文件中使用 ; ...
                【解决方案13】:

                这对我有用:http://ubuntuforums.org/showthread.php?t=1519176

                使用命令curl -sS https://getcomposer.org/installer | php 安装composer 后,只需运行sudo apt-get update,然后使用sudo apt-get install php5-curl 重新安装curl。然后 composer 的安装过程应该可以运行,因此您最终可以运行 php composer.phar install 以获取 composer.json 文件中列出的依赖项。

                【讨论】:

                • 由于安装方法,我一直避免使用 Composer,这证实了我的不情愿。
                • @MrYellow 那么你使用什么包/依赖管理器? Composer的安装方式有什么问题?
                【解决方案14】:

                我在尝试让 composer 安装一些依赖项时遇到了类似的问题。 事实证明,我的 Wamp 版本附带的 .dll 与 64 位 Windows 存在冲突。

                这个网址有固定的 curl dll:http://www.anindya.com/php-5-4-3-and-php-5-3-13-x64-64-bit-for-windows/

                向下滚动到显示:Fixed Curl Extensions 的部分。

                我下载了“php_curl-5.4.3-VC9-x64.zip”。我只是用 zip 文件中的 dll 覆盖了 wamp/bin/php/php5.4.3/ext 目录中的 dll,composer 再次工作。

                我正在运行 64 位 Windows 8。

                希望这会有所帮助。

                【讨论】:

                  【解决方案15】:

                  正如 Danack 在 cmets 中所说,有 2 个 php.ini 文件。我在 Apache 文件夹中取消注释带有 curl 扩展名的行,这是 Web 服务器使用的 php.ini。

                  另一方面,Composer 使用 php 作为控制台,这是一个完全不同的故事。该程序的 Php.ini 文件不在 Apache 文件夹中,但它在 PHP 文件夹中,我也不得不取消注释其中的行。然后我再次运行安装,一切正常。

                  【讨论】:

                    【解决方案16】:

                    根据https://github.com/composer/composer/issues/2119,您可以扩展您的本地composer.json 以声明它提供了扩展(实际上并没有这样做 - 这就是为什么您不应该公开发布您的包,只能在内部使用它)。

                    【讨论】:

                    • 奇怪,它是如何工作的?你的意思是作曲家自己加载扩展?
                    • Composer 首先构建一个应该存在的东西的列表,然后搜索满足这个需求列表的东西。安装的 PHP 扩展只是列表中的一个条目,可用于满足要求。 provide 与 PHP 扩展名相同的包也可以满足要求,因为在比较所需内容和现有内容的阶段,扩展只是一个字符串,就像库包名一样。
                    猜你喜欢
                    • 2017-12-20
                    • 2018-10-03
                    • 2022-08-05
                    • 2013-04-18
                    • 1970-01-01
                    • 2015-02-21
                    • 2022-11-15
                    • 2022-08-20
                    • 2018-09-10
                    相关资源
                    最近更新 更多