Обновление Composer: запрошенное расширение PHP ext-http отсутствует

Я создаю веб-сайт php, используя фреймворк symfony и композитор.

  • Операционная система: Windows 10
  • Версия PHP: 7.3.2
  • Symfony: 4.2.3 (env: dev, отладка: true)
  • Композитор: 1.8.4 (11 февраля 2019 г.)

Когда я пытаюсь сделать compose update внутри папки проектов или когда я пытаюсь установить пакет с помощью composer require symfony/swiftmailer-bundle, я получаю следующую ошибку:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - The requested PHP extension ext-http * is missing from your system.
      Install or enable PHP's http extension.

(Там написано «Проблема 1», но это единственная указанная проблема.)

Я уже искал расширение в своем файле php.ini, но не могу его найти. Нужно ли устанавливать расширение вручную? Если да, то где я могу найти его?

Заранее спасибо!

stackoverflow.com/questions/22332031/…
FAEWZX 13.02.2019 18:00

Не могли бы вы опубликовать содержимое вашего composer.json?

dbrumann 13.02.2019 18:00

@FAEWZX Я уже рассмотрел этот вопрос, но это не помогло. Он ищет «ext-intl», но я могу найти его в своем «php.ini», но не в ext-http.

Matti VM 14.02.2019 10:15

Я также получаю эту ошибку, но "ext-http": "*", имеет всегда был в моем composer.json несколько лет назад. Композитор никогда раньше не жаловался, никаких изменений env. Что случилось с этим? Как ни странно, трудно найти какую-либо информацию о таком расширении ... Я также не помню, чтобы такое расширение явно устанавливалось. Что это такое?

Yes Barry 31.07.2019 21:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
28
4
61 494
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Вы уже пробовали варианты здесь для подобных проблем?

Я еще не сталкивался с этой проблемой в стеках WAMP ... но похоже, что некоторые связанные статьи (где этот конкретный элемент «ext-http» не является проблемой) могут быть полезны.

Когда у меня возникали подобные проблемы со стеками LAMP, обычно это означало, что мне действительно нужно было установить упомянутый элемент... хотя иногда Composer немного вводил в заблуждение относительно необходимого элемента.


Пример #1 (ЛАМПА)... необходим фактически описанный элемент:

composer require phpoffice/phpspreadsheet
  • Произошла ошибка: missing php-mstring

  • Решение:

    yum install php-mbstring


Пример #2 (ЛАМПА)... требовалось что-то немного отличающееся от описанного:

composer require phpoffice/phpspreadsheet
  • Произошла ошибка: missing ext-zip

  • Решение:

    yum install php-pecl-zip


Кроме того, возможно, запуск композитора в подробном режиме?

Но я думаю, что лучше всего начать с первой ссылки, представленной в этом ответе (а затем просмотреть аналогичные проблемы с отсутствующими элементами WAMP Composer).

Согласно Официальная документация PHP, вам нужно будет найти свое расширение в php.ini и раскомментировать его ИЛИ вообще добавить. Это, наверное, что-то вроде extension=php_http.dll.

php-http — это стандарт, который реализуется различными пакетами. ext-http — это способ Composer сообщить, что вашему приложению требуется хотя бы один из этих пакетов. Дополнительные сведения см. в разделе «Виртуальные пакеты Composer» по адресу http://docs.php-http.org/en/latest/clients.html.

В отличие от других пакетов, строки ext-... на самом деле ничего не устанавливают через композитор, они просто заставляют композитор проверять, есть ли у вас какая-то необходимая зависимость. Обычно вы можете просто установить соответствующую библиотеку PHP, например. ext-zip означает, что вам нужно установить php-zip. В этом случае нет единой библиотеки PHP, а есть ряд совместимых библиотек.

Вы сможете решить свою проблему, установив один из предоставленных пакетов, например.

composer require php-http/curl-client

Это было и невозможно, потому что я не мог запускать composer require команды.

Matti VM 14.02.2019 10:25

Он имел в виду ext-httpнетphp-http

Yes Barry 31.07.2019 21:39

@ДаБарри, я знаю. В своем ответе я указал, что ext-http — это общий способ сообщить композитору, что вашему приложению требуется php-http совместимая реализация. Я расширил свой ответ соответственно. Конечно, если вы удалите строку, зависимость исчезнет, ​​но если вы ДЕЙСТВИТЕЛЬНО хотите удовлетворить требования ext-http в своей среде, мой ответ остается в силе.

Francesco Abeni 01.08.2019 10:44

Интересно, я был не в курсе. Считайте себя просветленным. Спасибо и хорошая редакция. Изменено на +1.

Yes Barry 01.08.2019 19:09

Это не сработало для меня: composer require php-http/curl-client Using version ^2.1 for php-http/curl-client ./composer.json has been updated 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 - The requested PHP extension ext-http * is missing from your system. Install or enable PHP's http extension. Installation failed, reverting ./composer.json to its original content.

sneaky 17.01.2020 07:57

Между «ext-http» и «php-http» нет никакой связи. Для композитора все пакеты, начинающиеся с «ext-», являются не пользовательскими пакетами, а расширениями. Существует метапакет «php-http/client-implementation», который предоставляет «php-http/curl-client».

Naji 23.01.2020 13:20

@Наджи, это именно то, что я пытался объяснить в своем ответе. Вы чувствуете, что чего-то не хватает/не так? Буду рад получить дополнительную информацию.

Francesco Abeni 23.01.2020 13:38

Вы создаете связь между «ext-http» и HTTPlug и указываете, что php-http/curl-client удовлетворит требование «ext-http». Как подлый уже пробовал, это не так. На самом деле php-http/curl-client просто удовлетворяет требованиям реализации php-http/client-implementation.

Naji 24.01.2020 09:58
Ответ принят как подходящий

Решение найдено. Почему-то мой composer.json содержал "ext-http": "*".

"require": {
    "ext-http": "*"
}

Удаление этой строки решило проблему. Я не знаю, почему он содержал "ext-http": "*", и я не совсем понимаю, почему его удаление решит проблему. (Это потому, что он ищет расширение, но не может его найти?)

(Спасибо всем, кто пытается помочь мне решить проблему!)

Обновлять: Возможно, стоит посмотреть и другие ответы. Я больше не использую PHP, поэтому не могу проверить правильность этих новых ответов.

Это также было добавлено в мой composer.json. PhpStorm добавил его, чтобы избавиться от предупреждения о коде. Мне интересно, используете ли вы Phpstorm?

ScottGutman 23.02.2019 04:24

@ScottGutman Да, я использую PhpStorm, но я никогда не видел сообщения/предупреждения/уведомления о предупреждении кода, из-за которого PhpStorm добавил его в composer.json.

Matti VM 24.02.2019 10:33
ext-http внутри composer.json просто указывает, что проект Composer (или библиотека) зависит от функциональности, предоставляемой ext-http. Удаление этой строки не обязательно решит проблему — оно просто уберет предупреждение, но код, использующий функциональность ext-http, все равно сломается — скорее всего, в очень специфических ситуациях. Кстати, эта ситуация применима и к другим расширениям. Composer на самом деле не знает, использует ли ваш код/проект зависимость или нет — это относится как к ext-, так и к обычным зависимостям.
Christian 17.03.2020 04:10

Этот «ответ» должен быть отвергнут 23 раза, а не одобрен. Этот «ответ» не решает проблему.

emix 10.08.2020 10:14

@emix не сердись на него, он просто скрывает проблему, даже не пытаясь ее решить

Thamer 24.03.2021 19:13

@Thamer О, но я пытался это исправить. Во время публикации моего «решения» люди просто не предлагали решение, которое было бы лучше, чем мое решение «скрыть проблему» (или не предлагали решение, которое даже работало для меня). Вы наверное тоже не читали мое обновление?! Я больше не использую PHP. Я не собираюсь снова делать полную настройку и пытаться воспроизвести проблему. Поэтому я не могу и не буду проверять правильность этих новых ответов. Люди могут свободно голосовать за другие решения. Но эй... Я не пытаюсь быть строгим к тебе, но ты даже не пытался опубликовать решение самостоятельно.

Matti VM 18.06.2021 15:05

Это НЕ ответ. Удаление строки в composer.json только скрывает предупреждение. Проверьте другие ответы (установка с помощью apt или pecl)

bloub 21.09.2021 18:08

в моем случае я использую Ubuntu, надеюсь, это решит проблему.

sudo apt install php-http

Если кому-то это нужно, можно также установить с помощью pecl
(для сборки нужны расширения raphf и propro):

yum install libcurl-devel brotli-devel
pecl install pecl_http

...
Build process completed successfully
Installing '/usr/lib64/php/modules/http.so'
Installing '/usr/include/php/ext/http/php_http.h'
Installing '/usr/include/php/ext/http/php_http_api.h'
Installing '/usr/include/php/ext/http/php_http_buffer.h'
Installing '/usr/include/php/ext/http/php_http_client.h'
Installing '/usr/include/php/ext/http/php_http_client_curl.h'
Installing '/usr/include/php/ext/http/php_http_client_curl_event.h'
Installing '/usr/include/php/ext/http/php_http_client_curl_user.h'
Installing '/usr/include/php/ext/http/php_http_client_request.h'
Installing '/usr/include/php/ext/http/php_http_client_response.h'
Installing '/usr/include/php/ext/http/php_http_cookie.h'
Installing '/usr/include/php/ext/http/php_http_curl.h'
Installing '/usr/include/php/ext/http/php_http_encoding.h'
Installing '/usr/include/php/ext/http/php_http_encoding_brotli.h'
Installing '/usr/include/php/ext/http/php_http_encoding_zlib.h'
Installing '/usr/include/php/ext/http/php_http_env.h'
Installing '/usr/include/php/ext/http/php_http_env_request.h'
Installing '/usr/include/php/ext/http/php_http_env_response.h'
Installing '/usr/include/php/ext/http/php_http_etag.h'
Installing '/usr/include/php/ext/http/php_http_exception.h'
Installing '/usr/include/php/ext/http/php_http_filter.h'
Installing '/usr/include/php/ext/http/php_http_header.h'
Installing '/usr/include/php/ext/http/php_http_header_parser.h'
Installing '/usr/include/php/ext/http/php_http_info.h'
Installing '/usr/include/php/ext/http/php_http_message.h'
Installing '/usr/include/php/ext/http/php_http_message_body.h'
Installing '/usr/include/php/ext/http/php_http_message_parser.h'
Installing '/usr/include/php/ext/http/php_http_misc.h'
Installing '/usr/include/php/ext/http/php_http_negotiate.h'
Installing '/usr/include/php/ext/http/php_http_object.h'
Installing '/usr/include/php/ext/http/php_http_options.h'
Installing '/usr/include/php/ext/http/php_http_params.h'
Installing '/usr/include/php/ext/http/php_http_querystring.h'
Installing '/usr/include/php/ext/http/php_http_response_codes.h'
Installing '/usr/include/php/ext/http/php_http_url.h'
Installing '/usr/include/php/ext/http/php_http_utf8.h'
Installing '/usr/include/php/ext/http/php_http_version.h'
install ok: channel://pecl.php.net/pecl_http-3.2.3
configuration option "php_ini" is not set to php.ini location
You should add "extension=http.so" to php.ini

Для тех, кто столкнулся с этой проблемой:

- The requested PHP extension ext-http * is missing from your system.

Решение состоит в том, чтобы просто установить расширение PHP:

sudo apt install php-pecl-http

Вы знаете, на окнах, как это можно получить?

Fernando León 01.10.2021 19:28

Была такая же проблема в файле composer.json. Также обнаружил, что у меня есть "ext-http": "*". Чтобы решить эту проблему, просто удалите "ext-http": "*" и попробуйте установить пакет снова. Мне помогло, надеюсь и вам :)

В моем случае комбинация сработала (Ubuntu php7.4)

sudo apt install php-pear
pecl install pecl_http

У меня была такая же проблема. Моя проблема заключалась в том, что при использовании класса RuntimeException я ошибся при импорте use http\Exception\RuntimeException; вместо стандартного use RuntimeException. И класс http\Exception\RuntimeException; требовал ext-http расширения. Поэтому я предлагаю вам выполнить поиск по всему проекту и проверить, допустили ли вы ту же ошибку, что и моя, или нет. Вы можете искать все по ключевому слову use http\. Кстати, я не думаю, что установка или удаление ext-http плагина решит проблему.

Другие вопросы по теме