Я создаю веб-сайт php, используя фреймворк symfony и композитор.
Когда я пытаюсь сделать 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, но не могу его найти. Нужно ли устанавливать расширение вручную? Если да, то где я могу найти его?
Заранее спасибо!
Не могли бы вы опубликовать содержимое вашего composer.json?
@FAEWZX Я уже рассмотрел этот вопрос, но это не помогло. Он ищет «ext-intl», но я могу найти его в своем «php.ini», но не в ext-http.
Я также получаю эту ошибку, но "ext-http": "*", имеет всегда был в моем composer.json несколько лет назад. Композитор никогда раньше не жаловался, никаких изменений env. Что случилось с этим? Как ни странно, трудно найти какую-либо информацию о таком расширении ... Я также не помню, чтобы такое расширение явно устанавливалось. Что это такое?






Вы уже пробовали варианты здесь для подобных проблем?
Я еще не сталкивался с этой проблемой в стеках WAMP ... но похоже, что некоторые связанные статьи (где этот конкретный элемент «ext-http» не является проблемой) могут быть полезны.
Когда у меня возникали подобные проблемы со стеками LAMP, обычно это означало, что мне действительно нужно было установить упомянутый элемент... хотя иногда Composer немного вводил в заблуждение относительно необходимого элемента.
composer require phpoffice/phpspreadsheet
Произошла ошибка: missing php-mstring
Решение:
yum install php-mbstring
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 команды.
Он имел в виду ext-httpнетphp-http
@ДаБарри, я знаю. В своем ответе я указал, что ext-http — это общий способ сообщить композитору, что вашему приложению требуется php-http совместимая реализация. Я расширил свой ответ соответственно. Конечно, если вы удалите строку, зависимость исчезнет, но если вы ДЕЙСТВИТЕЛЬНО хотите удовлетворить требования ext-http в своей среде, мой ответ остается в силе.
Интересно, я был не в курсе. Считайте себя просветленным. Спасибо и хорошая редакция. Изменено на +1.
Это не сработало для меня: 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.
Между «ext-http» и «php-http» нет никакой связи. Для композитора все пакеты, начинающиеся с «ext-», являются не пользовательскими пакетами, а расширениями. Существует метапакет «php-http/client-implementation», который предоставляет «php-http/curl-client».
@Наджи, это именно то, что я пытался объяснить в своем ответе. Вы чувствуете, что чего-то не хватает/не так? Буду рад получить дополнительную информацию.
Вы создаете связь между «ext-http» и HTTPlug и указываете, что php-http/curl-client удовлетворит требование «ext-http». Как подлый уже пробовал, это не так. На самом деле php-http/curl-client просто удовлетворяет требованиям реализации php-http/client-implementation.
Решение найдено. Почему-то мой composer.json содержал "ext-http": "*".
"require": {
"ext-http": "*"
}
Удаление этой строки решило проблему. Я не знаю, почему он содержал "ext-http": "*", и я не совсем понимаю, почему его удаление решит проблему. (Это потому, что он ищет расширение, но не может его найти?)
(Спасибо всем, кто пытается помочь мне решить проблему!)
Обновлять: Возможно, стоит посмотреть и другие ответы. Я больше не использую PHP, поэтому не могу проверить правильность этих новых ответов.
Это также было добавлено в мой composer.json. PhpStorm добавил его, чтобы избавиться от предупреждения о коде. Мне интересно, используете ли вы Phpstorm?
@ScottGutman Да, я использую PhpStorm, но я никогда не видел сообщения/предупреждения/уведомления о предупреждении кода, из-за которого PhpStorm добавил его в composer.json.
ext-http внутри composer.json просто указывает, что проект Composer (или библиотека) зависит от функциональности, предоставляемой ext-http. Удаление этой строки не обязательно решит проблему — оно просто уберет предупреждение, но код, использующий функциональность ext-http, все равно сломается — скорее всего, в очень специфических ситуациях. Кстати, эта ситуация применима и к другим расширениям. Composer на самом деле не знает, использует ли ваш код/проект зависимость или нет — это относится как к ext-, так и к обычным зависимостям.
Этот «ответ» должен быть отвергнут 23 раза, а не одобрен. Этот «ответ» не решает проблему.
@emix не сердись на него, он просто скрывает проблему, даже не пытаясь ее решить
@Thamer О, но я пытался это исправить. Во время публикации моего «решения» люди просто не предлагали решение, которое было бы лучше, чем мое решение «скрыть проблему» (или не предлагали решение, которое даже работало для меня). Вы наверное тоже не читали мое обновление?! Я больше не использую PHP. Я не собираюсь снова делать полную настройку и пытаться воспроизвести проблему. Поэтому я не могу и не буду проверять правильность этих новых ответов. Люди могут свободно голосовать за другие решения. Но эй... Я не пытаюсь быть строгим к тебе, но ты даже не пытался опубликовать решение самостоятельно.
Это НЕ ответ. Удаление строки в composer.json только скрывает предупреждение. Проверьте другие ответы (установка с помощью apt или pecl)
в моем случае я использую 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
Вы знаете, на окнах, как это можно получить?
Была такая же проблема в файле 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 плагина решит проблему.