Erro de instalação do compositor - requer ext_curl quando está realmente ativado

188

Estou tentando instalar o Facebook PHP SDK com o Composer. É isso que eu recebo

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

O problema é que eu tenho a extensão de onda ativada (não comentada no php.ini). Quando corro phpinfo(), ele diz que está ativado. A única pista que tenho é que, quando corro $ php -m, falta a linha 'curl', mas não sei o que fazer.

Eu tenho o wamp 2.4 no Win8 e estou executando o compositor no cmd.exe.

Michal Artazov
fonte
5
Execute "php -i | grep php.ini" para garantir que você esteja editando o arquivo ini correto para PHP?
Danack 12/10
3
O Composer solicitará ao PHP atualmente em execução as extensões, que é a versão da linha de comando do PHP, não a versão do servidor. Se o PHP não tiver a extensão curl, ele não funcionará. Essa é provavelmente uma falha na implementação atual do Composer, porque pegar pacotes remotos não requer as extensões e o servidor usado para pegar pacotes não deve ser o servidor usado para executar as coisas.
Sven

Respostas:

390

Isso é causado porque você não possui uma biblioteca php5-curl instalada em seu sistema,

No Ubuntu, basta executar o código de linha abaixo; no seu caso no Xamp, consulte a documentação do Xamp.

sudo apt-get install php5-curl

Para quem usa php7.0

sudo apt-get install php7.0-curl

Para quem usa php7.1

sudo apt-get install php7.1-curl

Para quem usa php7.2

sudo apt-get install php7.2-curl

Para quem usa php7.3

sudo apt-get install php7.3-curl

Ou simplesmente execute o comando abaixo para instalar pela sua versão:

sudo apt-get install php-curl
Adriano Rosa
fonte
10
O autor da pergunta parece estar executando o Windows. O Windows não é baseado no Debian.
Huertanix 14/05
3
@huertanix, apesar de o sistema do usuário estar em execução, o erro da pergunta é porque a biblioteca curl não está instalada no sistema que pode causar erro no compositor, o que eu aponto é apenas um exemplo para esclarecer ao usuário como corrigir isso.
Adriano Rosa
3
no ubuntu 16 com php 5.6 você deve usar sudo apt-get install php5.6-curl
barak
4
Resolvido com este "sudo apt-get install php-curl"
vnchopra
2
O php-curl é um meta-pacote que torna a solução independente da versão do php. Assim, "sudo apt-get install php-curl" é a resposta universal
Max
113

Isso funcionou para mim: http://ubuntuforums.org/showthread.php?t=1519176

Depois de instalar o compositor usando o comando, curl -sS https://getcomposer.org/installer | phpbasta executar um sudo apt-get updatereinstale o curl com sudo apt-get install php5-curl. O processo de instalação do compositor deve funcionar para que você possa finalmente executar php composer.phar installpara obter as dependências listadas no seu arquivo composer.json.

user2998553
fonte
Eu sempre evitei o Composer devido ao método de instalação, isso confirma minha relutância.
precisa
@ MrYellow, então, que gerenciador de pacotes / dependência você usa? O que há de errado com o método de instalação do Composer?
Wirone 5/07
26

Como Danack disse nos comentários, existem 2 arquivos php.ini. Descomentei a linha com extensão curl na pasta Apache, que é o php.ini usado pelo servidor web.

Compositor, por outro lado, usa php para console, que é uma história totalmente diferente. O arquivo php.ini para esse programa não é o da pasta Apache, mas está na pasta PHP e eu também tive que descomentar a linha. Então eu executei a instalação novamente e estava tudo bem.

Michal Artazov
fonte
26

no php7 execute por exemplo:

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

para cada extensão ausente. Então:

> sudo apt-get update

e finalmente (na pasta raiz do projeto):

> composer install
Grigoreas P.
fonte
11

Corri para o mesmo problema ao tentar instalar o Dropbox SDK.

O CURL estava realmente ativado no meu sistema, mas isso significava o php.ini na pasta wamp \ bin \ apache.

Eu simplesmente tive que editar manualmente o php.ini situado em wamp \ bin \ php, descomentar a extension=php_curl.dlllinha, reiniciar o Wamp e funcionou perfeitamente.

Por que existem esses 2 php.ini e apenas um é usado ainda é um mistério para mim ...

Espero que seja útil para alguém!

user3497737
fonte
Um php.ini é usado pelo Apache dentro WAMP e a outra é usada quando se inicia o construído em servidor web PHP como este: $ php -S localhost:8000no console
Yahya Uddin
Obrigado cara, funciona perfeitamente !! Não entendo por que php_curl está marcada e com um ;no arquivo php.ini ...
w3spi
10

Eu tive esse problema depois de atualizar para o PHP5.6. Minha resposta é muito semelhante à de Adriano, exceto que eu tive que correr:

sudo apt-get install php5.6-curl

Observe o "5.6". Instalar o php5-curl não funcionou para mim.

Aaron Wright
fonte
5

De acordo com https://github.com/composer/composer/issues/2119, você pode estender seu local composer.jsonpara indicar que ele fornece a extensão (o que realmente não funciona - é por isso que você não deve publicar publicamente seu pacote, apenas use-o internamente).

Sven
fonte
Estranho, como isso funciona? Você quer dizer que o compositor carrega a própria extensão?
Pacerier 11/08/15
O Composer primeiro cria uma lista de itens que devem estar presentes e, em seguida, procura por itens que atendam a essa lista de requisitos. As extensões PHP instaladas simplesmente são uma entrada na lista que está disponível para atender aos requisitos. Pacotes que provideum pacote com o mesmo nome de uma extensão PHP também satisfazem os requisitos, porque na fase de comparação de itens necessários e existentes, uma extensão é simplesmente uma string, como o nome de um pacote de biblioteca.
Sven
3

Ativar no php 7 try abaixo do comando

sudo apt-get install php7.0-curl
Sujal Patel
fonte
2

Corri para um problema semelhante ao tentar fazer o compositor instalar algumas dependências. Acontece que o arquivo .dll da minha versão do Wamp teve um conflito, suponho, com o Windows de 64 bits.

Este URL corrigiu as DLLs de ondulação: http://www.anindya.com/php-5-4-3-and-php-5-3-13-x64-64-bit-for-windows/

Role para baixo até a seção que diz: Extensões de ondulação corrigidas.

Eu baixei "php_curl-5.4.3-VC9-x64.zip". Acabei de substituir a dll dentro do diretório wamp / bin / php / php5.4.3 / ext pela dll que estava no arquivo zip e o compositor voltou a funcionar.

Estou executando o Windows 8 de 64 bits.

Espero que isto ajude.

Gratus D.
fonte
2

Para quem encontra esse problema no Windows, não consegui encontrar minha resposta no google. Eu apenas tentei executar o compositor requer ext-curl e isso funcionou. Como alternativa, adicione o seguinte no seu arquivo composer.json:

"require": {
"ext-curl": "^7.3"
}
Emily
fonte
1

se usar wamp, vá para:

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

Kadir Hadile
fonte
1

Eu tenho o Archlinux com o php 7.2, que possui o Curl integrado, portanto, nenhuma quantidade de configuração vodu faria o Composer ver ext-curl, que o PHP poderia ver e trabalhar com satisfação. A solução alternativa é usar o Composer com --ignore-platform-reqs.

por exemplo, atualização do compositor --ignore-platform-reqs

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

Ônix
fonte
1

tente instalar o php5-curl usando o trecho abaixo.

sudo apt-get install php5-curl

se não funcionar, tente o código abaixo, tenho certeza de que funcionará bem.

sudo apt-get install php-curl

para mim funcionou ... tudo de melhor :)

Ksaroz Shrestha
fonte
sudo apt-get install php-curl, funcionou para mim no ubuntu
max
0

No meu caso, mudei do PHP5 para o PHP7 e recebi esse erro: basta ir para o seu /bin/php/php7/php.ini, depois descomentar a extensão = php_curl.dll e reiniciar o servidor, execute novamente a instalação do compositor.

Inoubli
fonte
0

Não sei por que uma resposta com comandos do Linux obteria tantos votos positivos para uma pergunta relacionada ao Windows, mas de qualquer maneira ...

Se phpinfo()mostra Curl como ativado, ainda php -mque NÃO, significa que você provavelmente php-cli.initambém tem. execute php -ie veja qual arquivo ini foi carregado. Se for diferente, diferencie-o e reflita e as diferenças no arquivo ini da CLI. Então você deve estar pronto para ir.

Entre, baixe e use o Git Bash em vez do cmd.exe!

delboy1978uk
fonte