Error de instalación de Composer: requiere ext_curl cuando está realmente habilitado


188

Estoy intentando instalar Facebook PHP SDK con Composer. Esto es lo que obtengo

$ 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.

El problema es que tengo habilitada la extensión curl (sin comentarios en php.ini). Cuando corro phpinfo(), dice que está habilitado. La única pista que tengo es que cuando corro $ php -m, falta la línea 'curl' pero no sé qué hacer al respecto.

Tengo wamp 2.4 en Win8 y estoy ejecutando composer en cmd.exe.


55
Ejecute "php -i | grep php.ini" para asegurarse de que está editando el archivo INI correcto para PHP.
Danack

3
Composer le preguntará al PHP que se está ejecutando actualmente las extensiones, que es la versión de línea de comando de PHP, no la versión del servidor. Si ese PHP no tiene la extensión curl, no funcionará. Probablemente sea una deficiencia de la implementación actual de Composer, porque para obtener paquetes remotos no se requieren extensiones, y el servidor utilizado para obtener paquetes no debe ser el servidor utilizado para ejecutar cosas.
Sven

Respuestas:


390

Esto se debe a que no tiene una biblioteca php5-curl instalada en su sistema,

En Ubuntu es simplemente simple ejecutar el código de línea a continuación, en su caso en Xamp eche un vistazo a la documentación de Xamp

sudo apt-get install php5-curl

Para cualquiera que use php7.0

sudo apt-get install php7.0-curl

Para aquellos que usan php7.1

sudo apt-get install php7.1-curl

Para aquellos que usan php7.2

sudo apt-get install php7.2-curl

Para aquellos que usan php7.3

sudo apt-get install php7.3-curl

O simplemente ejecute el siguiente comando para instalar según su versión:

sudo apt-get install php-curl

10
El autor de la pregunta parece estar ejecutando Windows. Windows no está basado en Debian.
huertanix

3
@huertanix a pesar de que el sistema del usuario se está ejecutando, el error de la pregunta es porque la biblioteca curl no está instalada en el sistema, lo que puede causar un error del compositor, lo que señalo es solo un ejemplo para aclarar al usuario cómo solucionarlo.
Adriano Rosa

3
en ubuntu 16 con php 5.6 deberías usar sudo apt-get install php5.6-curl
barak

44
Resuelto con este "sudo apt-get install php-curl"
vnchopra

2
php-curl es un metapaquete que hace que la solución sea independiente de la versión php. Entonces "sudo apt-get install php-curl" es la respuesta universal
Max

113

Esto funcionó para mí: http://ubuntuforums.org/showthread.php?t=1519176

Después de instalar Composer usando el comando, curl -sS https://getcomposer.org/installer | phpsimplemente ejecute y sudo apt-get updateluego reinstale curl con sudo apt-get install php5-curl. Entonces, el proceso de instalación del compositor debería funcionar para que finalmente pueda ejecutar php composer.phar installpara obtener las dependencias enumeradas en su archivo composer.json.


Siempre he evitado Composer debido al método de instalación, esto confirma mi reticencia.
MrYellow

@MrYellow, ¿qué paquete / administrador de dependencias utiliza? ¿Qué tiene de malo el método de instalación de Composer?
Wirone

26

Como Danack dijo en los comentarios, hay 2 archivos php.ini. Descomenté la línea con la extensión curl en la carpeta Apache, que es php.ini utilizada por el servidor web.

Composer, por otro lado, usa php para consola, que es una historia completamente diferente. El archivo Php.ini para ese programa no es el que está en la carpeta Apache, pero está en la carpeta PHP y tuve que descomentar la línea también. Luego ejecuté la instalación nuevamente y estuvo bien.


26

en php7 ejecute por ejemplo:

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

por cada extensión faltante. Luego:

> sudo apt-get update

y finalmente (en la carpeta raíz del proyecto):

> composer install

11

Me encontré con el mismo problema al intentar instalar Dropbox SDK.

CURL estaba habilitado en mi sistema, pero esto significaba php.ini en la carpeta wamp \ bin \ apache.

Simplemente tuve que editar manualmente el php.ini ubicado en wamp \ bin \ php, descomentar la extension=php_curl.dlllínea, reiniciar Wamp y funcionó perfectamente.

Por qué existen esos 2 php.ini y solo se usa uno sigue siendo un misterio para mí ...

Espero que sea útil para alguien!


Apache usa un php.ini dentro de WAMP y el otro se usa al iniciar el servidor web PHP integrado de esta manera: $ php -S localhost:8000en la consola
Yahya Uddin

¡Gracias hombre, funciona perfectamente! No entiendo por qué php_curl está marcado y con un ;en el archivo php.ini ...
w3spi

10

Tuve este problema después de actualizar a PHP5.6. Mi respuesta es muy similar a la de Adriano, excepto que tuve que correr:

sudo apt-get install php5.6-curl

Observe el "5.6". Instalar php5-curl no funcionó para mí.


5

De acuerdo con https://github.com/composer/composer/issues/2119 , podría extender su local composer.jsonpara indicar que proporciona la extensión (lo que realmente no hace, por eso no debe publicar públicamente su paquete, solo úsalo internamente).


Extraño, ¿cómo funciona? ¿Quieres decir que el compositor carga la extensión en sí?
Pacerier

Composer primero crea una lista de cosas que deberían estar presentes, y luego busca cosas que satisfagan esta lista de requisitos. Las extensiones PHP instaladas simplemente son una entrada en la lista que está disponible para satisfacer los requisitos. Paquetes que provideun paquete que recibe el mismo nombre que una extensión PHP también satisfaría los requisitos, porque en la etapa de comparación de las cosas requeridas y existentes, una extensión es simplemente una cadena como el nombre de un paquete de biblioteca.
Sven

3

Habilitar en php 7 intente debajo del comando

sudo apt-get install php7.0-curl

2

Me encontré con un problema similar al intentar que Composer instalara algunas dependencias. Resulta que el .dll con el que vino mi versión de Wamp tenía un conflicto, supongo, con Windows de 64 bits.

Esta url tiene dlls de rizo fijos: http://www.anindya.com/php-5-4-3-and-php-5-3-13-x64-64-bit-for-windows/

Desplácese hacia abajo hasta la sección que dice: Extensiones de rizo fijas.

Descargué "php_curl-5.4.3-VC9-x64.zip". Acabo de sobrescribir la dll dentro del directorio wamp / bin / php / php5.4.3 / ext con la dll que estaba en el archivo zip y el compositor funcionó nuevamente.

Estoy ejecutando Windows 8 de 64 bits.

Espero que esto ayude.


2

Para cualquiera que encuentre este problema en Windows, no pude encontrar mi respuesta en Google en absoluto. Acabo de intentar ejecutar composer requiere ext-curl y esto funcionó. Alternativamente, agregue lo siguiente en su archivo composer.json:

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

1

si usa wamp vaya a:

wamp\bin\php\php.5.x.x\php.ini encontrar: ;extension=php_curl.dll eliminar (;)


1

Tengo Archlinux con php 7.2, que tiene Curl integrado, por lo que ninguna cantidad de configuración de vudú haría que Composer vea ext-curl, que PHP podría ver y trabajar felizmente. Evitar es usar Composer con --ignore-platform-reqs.

por ejemplo, actualización del compositor --ignore-platform-reqs

Referencia = https://github.com/composer/composer/issues/1426


1

intente instalar php5-curl utilizando el fragmento a continuación.

sudo apt-get install php5-curl

si no funciona, intente debajo del código, estoy seguro de que funcionará bien.

sudo apt-get install php-curl

para mí funcionó ... todo lo mejor :)


sudo apt-get install php-curl, funcionó para mí en ubuntu
max

0

En mi caso, me mudé de PHP5 a PHP7 y obtuve este error, simplemente vaya a /bin/php/php7/php.ini, luego elimine el comentario de extension = php_curl.dll y reinicie su servidor, vuelva a ejecutar la instalación de su compositor.


0

No estoy seguro de por qué una respuesta con comandos de Linux obtendría tantos votos para una pregunta relacionada con Windows, pero de todos modos ...

Si phpinfo()muestra Curl como habilitado, pero php -mNO, significa que probablemente también tengas un php-cli.ini. ejecutar php -iy ver qué archivo ini cargado. Si es diferente, difúndalo y refleje y las diferencias en el archivo ini de la CLI. Entonces deberías ser bueno para ir.

Por cierto, descargue y use Git Bash en lugar de cmd.exe.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.