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.

Michal Artazov
fuente
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
Adriano Rosa
fuente
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.

usuario2998553
fuente
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.

Michal Artazov
fuente
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
Grigoreas P.
fuente
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!

usuario3497737
fuente
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í.

Aaron Wright
fuente
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).

Sven
fuente
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
Sujal Patel
fuente
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.

Gratus D.
fuente
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"
}
Emily
fuente
1

si usa wamp vaya a:

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

Kadir Hadile
fuente
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

Ónix
fuente
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 :)

Ksaroz Shrestha
fuente
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.

Inoubli
fuente
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.

delboy1978uk
fuente