Composer安装错误 - 要求ext_curl,但实际上已启用

279

我正在尝试使用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。

7
运行“php -i | grep php.ini”来确认你正在编辑正确的PHP ini文件? - Danack
3
Composer 会向当前运行的 PHP 请求扩展,这是命令行版本的 PHP,而不是服务器版本。如果该 PHP 没有 curl 扩展,它将无法工作。这可能是 Composer 当前实现的一个缺陷,因为获取远程包不需要扩展,并且用于获取包的服务器不能是用于执行操作的服务器。 - Sven
19个回答

644
这是因为您的系统中没有安装php5-curl库引起的,
在Ubuntu上,只需运行下面的代码行即可,在您的情况下,请查看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

对于那些使用php8.1的人来说
sudo apt-get install php8.1-curl

或者只需运行以下命令根据您的版本进行安装:
sudo apt-get install php-curl

27
问问题的作者似乎在使用Windows操作系统。Windows并不是基于Debian系统的。 - huertanix
5
@huertanix,无论用户使用的是什么系统,问题出现的原因是系统上没有安装curl库,这可能导致composer错误。我指出的只是一个示例,以便让用户知道如何修复该问题。 - Adriano Rosa
4
在使用 Ubuntu 16 和 PHP 5.6 的情况下,您应该使用以下命令安装 Curl 扩展: sudo apt-get install php5.6-curl - barak
5
通过以下命令解决问题:“sudo apt-get install php-curl”。 - vnchopra
6
php-curl是一个元包,使解决方案不依赖于PHP版本。因此,“sudo apt-get install php-curl”是通用答案。 - Max
显示剩余11条评论

116
这对我很有用:http://ubuntuforums.org/showthread.php?t=1519176 在使用命令curl -sS https://getcomposer.org/installer | php安装composer后,只需运行sudo apt-get update,然后重新安装curl,使用sudo apt-get install php5-curl。然后,composer的安装过程应该可以正常工作,这样您就可以最终运行php composer.phar install,以获取在composer.json文件中列出的依赖项。

我一直避免使用Composer,因为它的安装方法,这证实了我的犹豫。 - MrYellow
2
@MrYellow,您使用哪个包/依赖管理器?Composer的安装方法有什么问题吗? - Wirone

34

在 PHP7 上运行,例如:

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

对于每个缺失的扩展名,执行以下操作:

> sudo apt-get update

最后,在项目的根目录中执行以下命令:

> composer install

27

正如 Danack 在评论中所说,有 2 个 php.ini 文件。我取消了 Apache 文件夹中的那个文件里面 curl 扩展的注释,这是 Web 服务器使用的 php.ini 文件。

然而,Composer 使用的是命令行中的 php,这是一个完全不同的故事。该程序的 Php.ini 文件不在 Apache 文件夹中,而是在 PHP 文件夹中,我也必须在其中解除注释。然后我再次运行安装,一切都很好。


13

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

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

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

为什么会有这两个php.ini,而只使用其中一个仍然是个谜…

希望对某人有所帮助!


一个php.ini文件被WAMP中的Apache使用,另一个则在启动内置的PHP Web服务器时使用,例如:在控制台中输入 $ php -S localhost:8000 - Yahya Uddin
谢谢,太棒了,它完美地运行了!!不明白为什么php_curl被选中并在php.ini文件中带有;... - w3spi

12

在升级到PHP5.6后,我也遇到了这个问题。我的解决方法与Adriano非常相似,只是我需要运行:

sudo apt-get install php5.6-curl

注意这里的“5.6”。安装php5-curl对我没用。


7

对于在Windows上遇到此问题的任何人,我在谷歌上找不到答案。 我只是尝试运行composer require ext-curl,这个方法有效。 或者在你的composer.json文件中添加以下内容:

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

请分享更多细节,以便其他人可以从中学习。如果Composer抱怨ext-curl已经丢失,将其添加到composer.json中如何解决问题?这并不会自动安装cURL(因为Composer不安装扩展)。 - Nico Haase

6

奇怪,它是如何工作的?你的意思是composer会加载扩展本身吗? - Pacerier
Composer首先构建一个应该存在的东西列表,然后搜索满足这个要求列表的东西。已安装的PHP扩展只是可用于满足要求的列表中的一个条目。提供与PHP扩展同名的包也将满足要求,因为在比较所需和现有的东西时,扩展只是一个字符串,就像库包名称一样。 - Sven

4

如果使用wamp,请按照以下步骤进行:

wamp\bin\php\php.5.x.x\php.ini 找到: ;extension=php_curl.dll 将分号去掉 (;)


4
当我尝试使用composer安装一些依赖项时,遇到了类似的问题。原来我使用的Wamp版本自带的.dll文件与64位Windows有冲突。这个网站提供了修复curl dlls的方法: 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”文件,并将其中的dll文件覆盖了wamp/bin/php/php5.4.3/ext目录中的dll文件,这样composer就可以正常工作了。我的操作系统是64位Windows 8。希望这可以帮到你。

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