Композитор устанавливает отсутствующий curl-ext

Я разрабатываю PHP на Ubuntu 14.04.4 LS. Запуск composer install не работает, и я не могу понять. Это работало раньше, когда я использовал PHP 5.5.9, но мне пришлось обновить как минимум до 5.6, чтобы установить phpunit.

Запуск php -v выходов:

PHP 5.6.23-1+deb.sury.org~trusty+2 (cli) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

Запуск which php выходов:

/usr/bin/php

что довольно подозрительно, так как не соответствует php -v (/usr/bin имеет: "php", "php5" и "php5.6")

Вот мой composer.json:

{
    "require-dev": {
        "phpunit/phpunit": "5.4.*"
    },
    "require": {
        "silex/silex": "~1.3",
        "stripe/stripe-php": "3.*"
    }
}

Запуск composer install создает этот вывод:

$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
- stripe/stripe-php v3.9.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.9.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.9.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.8.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.7.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.7.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.6.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.5.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.4.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.3.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.2.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.14.3 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.14.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.14.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.14.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.13.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.12.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.12.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.11.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.10.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.10.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.1.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.0.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- stripe/stripe-php v3.14.2 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- Installation request for stripe/stripe-php 3.* -> satisfiable by stripe/stripe-php[v3.0.0, v3.1.0, v3.10.0, v3.10.1, v3.11.0, v3.12.0, v3.12.1, v3.13.0, v3.14.0, v3.14.1, v3.14.2, v3.14.3, v3.2.0, v3.3.0, v3.4.0, v3.5.0, v3.6.0, v3.7.0, v3.7.1, v3.8.0, v3.9.0, v3.9.1, v3.9.2].

To enable extensions, verify that they are enabled in those .ini files:
- /etc/php/5.6/cli/php.ini
- /etc/php/5.6/cli/conf.d/10-opcache.ini
- /etc/php/5.6/cli/conf.d/10-pdo.ini
- /etc/php/5.6/cli/conf.d/20-calendar.ini
- /etc/php/5.6/cli/conf.d/20-ctype.ini
- /etc/php/5.6/cli/conf.d/20-exif.ini
- /etc/php/5.6/cli/conf.d/20-fileinfo.ini
- /etc/php/5.6/cli/conf.d/20-ftp.ini
- /etc/php/5.6/cli/conf.d/20-gettext.ini
- /etc/php/5.6/cli/conf.d/20-iconv.ini
- /etc/php/5.6/cli/conf.d/20-json.ini
- /etc/php/5.6/cli/conf.d/20-phar.ini
- /etc/php/5.6/cli/conf.d/20-posix.ini
- /etc/php/5.6/cli/conf.d/20-readline.ini
- /etc/php/5.6/cli/conf.d/20-shmop.ini
- /etc/php/5.6/cli/conf.d/20-sockets.ini
- /etc/php/5.6/cli/conf.d/20-sysvmsg.ini
- /etc/php/5.6/cli/conf.d/20-sysvsem.ini
- /etc/php/5.6/cli/conf.d/20-sysvshm.ini
- /etc/php/5.6/cli/conf.d/20-tokenizer.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

Я следовал этим инструкциям, но это не работает: Ошибка установки Composer - требуется ext_curl, когда он фактически включен

Запуск php -i | grep php.ini выходов:

Configuration File (php.ini) Path => /etc/php/5.6/cli
Loaded Configuration File => /etc/php/5.6/cli/php.ini

Выполняется: sudo apt-get install php5-curl выходов:

php5-curl is already the newest version.

Запуск curl -V выходов:

curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp 
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP 

Любая помощь приветствуется.


person Alan P.    schedule 25.06.2016    source источник
comment
Ввод dpkg -l | grep 'php5-curl' выводит: ii php5-curl 5.6.23+dfsg-1+deprecated+dontuse+deb.sury.org~trusty+1 amd64 CURL module for php5   -  person Alan P.    schedule 27.06.2016


Ответы (3)


Некоторые примечания:

  • Работа php -i — это хорошо. Он показывает вам php.ini, чтобы вы знали, какой файл редактировать.
  • Запуск curl -v не требуется, потому что это автономный curl для использования в CLI и не связанный с curl-расширением PHP.
  • Вы проверили наличие php5-curl, это необходимый пакет. Ok.

Чего не хватает? Вы должны убедиться, что расширение также загружено PHP!

Отредактируйте /etc/php/5.6/cli/php.ini, найдите extension, найдите php_curl и включите его: extension=php_curl.so.

Затем запустите php -m в CLI, чтобы просмотреть список загруженных модулей и убедиться, что curl загружен.

Наконец, повторно запустите файл composer install.

person Jens A. Koch    schedule 25.06.2016
comment
Спасибо за ответ. В файле php.ini нет php_curl.so — в нем есть php_curl.dll, но это для Windows, а я работаю в Ubuntu. Включение этой строки не помогло. В файле есть только два упоминания .so, оба для mysql. Я получил extensions_dir из phpinfo(), и в этом каталоге есть curl.so. Я также следовал инструкциям отсюда: stackoverflow.com/questions/23233460/ и файл /etc/php5/mods-available/curl.ini существует, и в нем есть extension=curl.so. Обновление вопроса выше. - person Alan P.; 27.06.2016
comment
Правильно, в Linux/Ubuntu вам нужно включить файл .so. Интересно, почему включение этого не сработало, если вы уже нашли файл php_curl.so в папке расширения. Пожалуйста, проверьте с помощью php -m, если он загружен. -- Если он не загружен, я думаю, вы все еще редактируете неправильный php.ini для PHP, который вы используете в CLI. Имейте в виду, что существуют разные файлы php.ini - для веб-запросов и для CLI. - person Jens A. Koch; 27.06.2016
comment
php -m не содержит curl. Команда php -i | grep php.ini заставляет меня думать, что я редактирую правильный файл php.ini. В этом файле php.ini я добавил extension=/path/to/extensions/curl.so (получил путь из вывода phpinfo()), и теперь php -m отображает список curl. Теперь, когда я запускаю composer install, я получаю сообщение об ошибке о другом отсутствующем пакете (ext-mbstring), так что, похоже, это работает. - person Alan P.; 27.06.2016
comment
Но тот факт, что я продолжаю получать ошибки, заставляет меня думать, что что-то не так. Ввод dpkg -l | grep 'php5-curl' выводит: ii php5-curl 5.6.23+dfsg-1+deprecated+dontuse+deb.sury.org~trusty+1 amd64 CURL module for php5. Обратите внимание, что там указано deprecated+dontuse. При обновлении моей версии PHP все прошло не гладко, я увидел это устаревшее сообщение и сделал еще одно обновление до более высокой версии. Возможно, я удалю весь PHP и начну заново. - person Alan P.; 27.06.2016
comment
Рад, что это сработало. | Что ж, если расширение curl загружено правильно и вы не видите конфликт API между расширением PHP и ядром PHP, когда вы запускаете PHP, тогда оно просто работает, даже если оно помечено как устаревшее. | Если вы получите несоответствие API, то переустановка PHP с расширениями может исправить ситуацию. - person Jens A. Koch; 27.06.2016

Выполните это: sudo apt-get install php-curl

person gandra404    schedule 02.02.2017
comment
Соответствующий ответ. Спасибо за публикацию - person ShaanSetia; 07.02.2019

если Ubuntu не является серверной версией, а веб-сервер был установлен с tasksel, попробуйте установить php apt-get install php

person rüff0    schedule 02.11.2016