Ошибка установки Composer - требует ext_curl, когда он действительно включен


188

Я пытаюсь установить Facebook PHP SDK с помощью Composer. Это то, что я получаю

$ 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' отсутствует, но я не знаю, что с этим делать.

У меня есть wamp 2.4 на Win8, и я запускаю composer в cmd.exe.


5
Запустите «php -i | grep php.ini», чтобы убедиться, что вы редактируете правильный INI-файл для PHP?
Данак,

3
Composer запросит расширения PHP, которые являются текущей версией командной строки, а не версией сервера. Если у этого PHP нет расширения curl, оно не будет работать. Вероятно, это является недостатком текущей реализации Composer, поскольку захват удаленных пакетов не требует расширений, а сервер, используемый для захвата пакетов, не должен быть сервером, используемым для выполнения задач.
Свен

Ответы:


391

Это вызвано тем, что в вашей системе не установлена ​​библиотека 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 не установлена ​​в системе, что может вызвать ошибку компоновщика, и я хочу показать, что это всего лишь пример, поясняющий пользователю, как это исправить.
Адриано Роза

3
в Ubuntu 16 с php 5.6 вы должны использовать sudo apt-get install php5.6-curl
barak

4
Решено с помощью этой "sudo apt-get install php-curl"
vnchopra

2
php-curl - это метапакет, который делает решение независимым от версии php. Так что "sudo apt-get install php-curl" - универсальный ответ
Макс

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

@MrYellow, так какой менеджер пакетов / зависимостей вы используете? Что не так с методом установки Composer?
Wirone

26

Как сказал Данак в комментариях, есть 2 файла php.ini. Я раскомментировал строку с расширением curl в папке Apache, которая используется 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 действительно был включен в моей системе, но это подразумевалось php.ini в папке wamp \ bin \ apache.

Мне просто пришлось вручную отредактировать php.ini, расположенный в wamp \ bin \ php, раскомментировать extension=php_curl.dll строку, перезапустить Wamp, и все заработало отлично.

Почему есть эти 2 php.ini и используется только один, для меня пока загадка ...

Надеюсь, это поможет кому-то!


Один php.ini используется Apache в WAMP, а другой используется при запуске встроенного веб-сервера PHP следующим образом: $ php -S localhost:8000в консоли
Яхья Уддин

Спасибо человек, это работает отлично! Не понимаю, почему проверяется php_curl и ;в файле php.ini ...
w3spi

10

У меня была эта проблема после обновления до PHP5.6. Мой ответ очень похож на ответ Адриано, за исключением того, что мне пришлось бежать:

sudo apt-get install php5.6-curl

Обратите внимание на «5,6». Установка php5-curl не работает для меня.


5

В соответствии с https://github.com/composer/composer/issues/2119 вы можете расширить свой локальный компьютер, composer.jsonзаявив, что он предоставляет расширение (чего на самом деле он не делает, поэтому не следует публично публиковать свой пакет, только использовать его внутренне).


Странно, как это работает? Вы имеете в виду, что композитор загружает само расширение?
Pacerier

Сначала Composer создает список элементов, которые должны присутствовать, а затем ищет элементы, которые удовлетворяют этому списку требований. Установленные PHP-расширения просто являются записью в списке, доступной для удовлетворения требований. Пакеты, provideдля которых пакет, который называется так же, как расширение PHP, также будут удовлетворять требованиям, поскольку на этапе сравнения требуемого и существующего содержимого расширение представляет собой просто строку, аналогичную имени пакета библиотеки.
Свен


2

Я столкнулся с подобной проблемой при попытке заставить композитора установить некоторые зависимости. Оказывается, .dll, с которой пришла моя версия Wamp, имел конфликт, я полагаю, с 64-битной Windows.

Этот URL-адрес имеет фиксированные локоны: http://www.anindya.com/php-5-4-3-and-php-5-3-13-x64-64-bit-for-windows/

Прокрутите вниз к разделу, который говорит: Фиксированные расширения Curl.

Я скачал "php_curl-5.4.3-VC9-x64.zip". Я просто переписал dll внутри директории wamp / bin / php / php5.4.3 / ext с помощью dll, которая была в zip-файле, и композитор снова заработал.

Я использую 64-битную Windows 8.

Надеюсь это поможет.


2

Для тех, кто сталкивается с этой проблемой в Windows, я не смог найти свой ответ на Google вообще. Я только что попробовал запустить composer требуют ext-curl, и это сработало. В качестве альтернативы добавьте следующее в ваш файл composer.json:

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

1

если использовать wamp, перейдите по ссылке:

wamp\bin\php\php.5.x.x\php.ini найти: ;extension=php_curl.dll удалить (;)


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 установить 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. Тогда тебе должно быть хорошо идти.

Кстати скачать и использовать Git Bash вместо cmd.exe!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.