Ошибка установки: Загрузка не удалась. Не найдены рабочие транспорты
'Installation failed: Download failed. No working transports found'.
Эта ошибка появилась, когда я попытался установить тему в WordPress. Как решить эту проблему?

Сайт на WordPress работал практически без проблем, за исключением раздела админ-панели, где возникали трудности с обновлением или установкой. При попытке установить тему появлялась ошибка: "Ошибка установки: Не удалось загрузить файл. Не найдено рабочих транспортов".
К счастью, я нашел решение этой проблемы.
Оказалось, что данная ошибка возникает из-за отсутствующих расширений на сервере разработки, из-за чего WordPress не может выполнять внешние HTTP-запросы.
Решение довольно простое. Необходимые расширения для выполнения HTTP-запросов уже установлены в Wamp Server, но по умолчанию они отключены. Чтобы их активировать, нужно отредактировать файл конфигурации php.ini.
Редактирование файла php.ini
Файл php.ini содержит список множества расширений, некоторые из которых отключены по умолчанию. В моем случае требовалось включить только расширение openssl.
Шаги для активации этого расширения:
- Запустите Wamp Server.
- Нажмите на иконку Wamp Server и перейдите в раздел PHP → php.ini.
- Дважды кликните на php.ini — файл откроется в вашем текстовом редакторе по умолчанию.
- Найдите в файле строку php_openssl.dll. ->Вы увидите, что расширение закомментировано: ;extension=php_openssl.dll
- Раскомментируйте строку, удалив точку с запятой (;).
- Сохраните изменения.
- Перезапустите Wamp Server.
Готово! Проблема решена!!!

На моем сервере Wamp (PHP 7) расширение называется просто openssl, а не php_openssl. Раскомментировав строку ;extension=openssl
, как указано в вашей инструкции, я решил эту проблему, спасибо!

Я получал эту ошибку, потому что в моем PHP (php.ini
) не было активировано расширение "cURL". Я просто активировал это расширение и перезапустил сервер. Проблема решена.
Примечание: это похожий ответ на ответ "Ashish Madhavacharya" выше, но конкретно решается активацией расширения php_curl.dll
(а не openssl расширения, которое не должно иметь отношения к этой ошибке, которую вы получаете.)

HTTP API WordPress разработан таким образом, чтобы работать на максимально возможном количестве серверов, используя различные методы (транспорты) для этого.
Согласно сообщению об ошибке, ни один из транспортов не работает, и WordPress не может выполнять исходящие HTTP-запросы.
Я рекомендую установить плагин, например Core Control для WordPress, который позволяет отлаживать все доступные HTTP-транспорты. Вполне возможно, что если один транспорт не работает, другой может быть исправен. Этот плагин позволяет отключить неработающий транспорт и протестировать HTTP API с другим транспортом.
Если окажется, что действительно ни один из транспортов не работает, следует обратиться к вашему хостинг-провайдеру с просьбой установить, как минимум, cURL на сервер, чтобы можно было выполнять HTTP-запросы из PHP.

Советы по поводу этого сообщения об ошибке довольно разнообразны, и никто не предоставляет исчерпывающего ответа (см. некоторые блоги, дублирующий ответ, а также здесь и здесь на Stack Overflow). Надеюсь, это более формальный подход к проблеме.
Я рассматриваю только WordPress на PHP, работающий через Apache (я не могу комментировать NginX на данный момент, так как не пробовал его с PHP, а также не могу говорить о других фреймворках). Ответ может содержать небольшую предвзятость в сторону Windows 10 с самостоятельно собранным Apache 2.4.37, потокобезопасным PHP 7.2 и WordPress 4.2.X.
Общая информация
PHP и cURL довольно хорошо объясняют, что WordPress под капотом использует Requests
, обёртку вокруг библиотек cURL
и fSockets
. Requests
предпочитает библиотеку cURL
, если она доступна, но, предположительно, может переключиться на fSockets
для загрузки плагинов, тем и т. д. Ошибка "No transports" указывает на то, что ни одна из этих библиотек не настроена правильно ни в Apache, ни в PHP. Также возможно, что ваш файрвол мешает процессу.
Проверка
Протестируйте конфигурацию Apache и PHP, создав и загрузив стандартный скрипт PHPinfo в браузере. В нём должен быть отдельный раздел cURL
, содержащий различную информацию. В противном случае создайте и загрузите следующий скрипт для проверки:
<?php
echo 'Curl: ', function_exists('curl_init') ? 'Включён' : 'Отключён';
?>
Я не знаю, как проверить fSockets
.
cURL
Чтобы обеспечить доступность cURL
, необходимо включить его в php.ini
.
-
Убедитесь, что
extension_dir
указывает на папку с расширениями:extension_dir="ext"
(Альтернативно часто предлагают
extension_dir="D:ПУТЬ/К/php/ext"
) -
Убедитесь, что расширение
cURL
включено:extension=curl
(Также предлагают
extensions=php_curl(.so|.dll)
илиextensions="ПУТЬ/К/php_curl(.so|.dll)"
, возможно, для PHP <7.2) -
Согласно PHP, библиотеки
eay32
,ssh2
иssleay32
также должны быть доступны в вашем PATH (в OpenSSL 1.1eay32
был переименован вcrypto-*
, аssleay32
— вssl-*
). В Windows можно скопировать эти библиотеки из корневой папки PHP вsystem32
илиwow64
, но это некрасиво. Лучше изменить переменную PATH, добавив корневую папку PHP (лично я предпочитаю чистый PATH, который настраиваю по необходимости, но это PHP). В *nix-системах достаточно установить пакетphp5-curl
для вашего дистрибутива.Примечание: Комментарии на странице PHP предполагают, что можно просто добавить записи
LoadFile "ПУТЬ/К/lib(eay32|ssh2)|ssleay32.dll"
вhttpd.conf
, ноcURL
ищет эти библиотеки в PATH, что делает предложение бесполезным. Пользователи XAMPP/WAMP обходятся без этого шага, так как их корневая папка обычно уже добавлена в PATH.
После этого перезапустите Apache. Если вы используете Apache Monitor, лучше сначала остановить, а затем запустить Apache — это создаст новую среду для работы службы (и избавит от перезагрузки системы).
fSockets
Я не знаю, что нужно сделать для его настройки.

У меня была такая же проблема, и приведенные выше исправления не помогли. Я нашел страницу на форуме WAMP, где кто-то решил эту проблему, обновив Apache до последней версии. Я попробовал это, и у меня сработало.

Публикую свой хак здесь для будущих искателей в Google:
Я скачал ZIP-архив плагина с сайтов соответствующих вендоров, поместил его в /var/www/html/wp-content/plugins/
, распаковал и активировал через админку WordPress.
Мне пришлось сделать это, потому что после включения ;extension=openssl
в php.ini
и перезапуска PHP-сервера, он не мог найти openssl.so
, несмотря на то что я компилировал PHP с флагом --with-openssl
.
