Composer安装错误-实际启用时需要ext_curl


187

我正在尝试使用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中运行了作曲器。


5
运行“ php -i | grep php.ini”以确保您正在为PHP编辑正确的ini文件?
Danack

3
Composer会向当前运行的PHP请求扩展,扩展是PHP的命令行版本,而不是服务器版本。如果那个PHP没有curl扩展名,它将无法工作。这可能是Composer当前实现的一个缺点,因为获取远程软件包不需要扩展,并且用于获取软件包的服务器一定不能是用于执行事物的服务器。
2013年

Answers:


388

这是由于您的系统中没有安装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

或者只是运行以下命令以按照您的版本进行安装:

sudo apt-get install php-curl

10
问题的作者似乎正在运行Windows。Windows不是基于Debian的。
huertanix

3
@huertanix尽管用户的系统正在运行,但错误的问题是因为未在系统上安装curl库,这可能会导致composer错误,我所指出的只是一个说明用户如何解决该问题的示例。
阿德里亚诺·罗莎

3
在使用php 5.6的ubuntu 16上,您应该使用sudo apt-get install php5.6-curl
barak

4
解决了此“ sudo apt-get install php-curl”问题
vnchopra 2016年

2
php-curl是一个元软件包,它使解决方案独立于php版本。所以“sudo易于得到安装PHP卷曲”是普遍的答案
马克斯

113

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

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


由于安装方法,我一直避免使用Composer,这证实了我的不情愿。
MrYellow 2015年

@MrYellow,那么您使用什么包/依赖管理器?Composer的安装方法有什么问题?
Wirone '16

26

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

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


26

在php7上运行例如:

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

对于每个缺少的扩展名。然后:

> sudo apt-get update

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

> composer install

11

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

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

我只需要手动编辑wamp \ bin \ php中的php.ini,取消注释 extension=php_curl.dll行,重新启动Wamp,就可以完美地工作了。

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

希望对某人有帮助!


Apache在WAMP中使用一个php.ini,而在启动内置PHP Web服务器时使用另一个php.ini:$ php -S localhost:8000在控制台中
Yahya Uddin

谢谢男人,它完美地运行!不明白为什么检查php_curl并;在php.ini文件中使用... ...
w3spi 2015年

10

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

sudo apt-get install php5.6-curl

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


5

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


很奇怪,它如何运作?您是说作曲家自己加载扩展程序吗?
Pacerier,2015年

Composer首先构建应显示的内容列表,然后搜索满足此需求列表的内容。安装的PHP扩展只是列表中的一项,可以满足要求。软件包provide名为同一个PHP扩展也将满足要求,因为要求比较和现有的东西的阶段的封装,扩展是一个简单的字符串,就像一个库包的名字。
2015年


2

当试图让作曲家安装一些依赖项时,我遇到了类似的问题。事实证明,我猜想Wamp版本附带的.dll与64位Windows发生冲突。

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

向下滚动到显示以下内容的部分:固定的卷曲扩展。

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

我正在运行64位Windows 8。

希望这可以帮助。


2

对于在Windows上遇到此问题的任何人,我都无法在google上找到我的答案。我只是试着运行作曲家需要ext-curl,这工作。或者在您的composer.json文件中添加以下内容:

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


1

我有Archlinux和php 7.2,集成了Curl,因此没有任何配置voodoo可以使Composer看到ext-curl,PHP可以高兴地看到并使用它。解决方法是将Composer与--ignore-platform-reqs一起使用。

例如,作曲家更新--ignore-platform-reqs

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


1

尝试使用以下代码片段安装php5-curl。

sudo apt-get install php5-curl

如果它不起作用,请尝试下面的代码,确保它可以正常工作。

sudo apt-get install php-curl

对我来说,它工作得最好... :)


sudo apt-get install php-curl,在ubuntu上为我工作
最多

0

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


0

不知道为什么Linux命令的答案会得到与Windows有关的问题这么多的赞成票,但是无论如何...

如果将phpinfo()Curl显示为已启用,但未显示php -m,则意味着您可能也拥有php-cli.ini。跑php -i并查看加载了哪个ini文件。如果不同,请进行比较,然后在CLI ini文件中反映和区别。那你应该很好。

顺便说一句,下载并使用Gi​​t Bash代替cmd.exe!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.