Вопрос или проблема
‘Установка не удалась: загрузка не удалась. Рабочие транспорты не найдены’.
Эта ошибка появилась, когда я пытался установить тему в 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 в php.ini. Вы увидите, что расширение закомментировано:
;extension=php_openssl.dll - Уберите точку с запятой (;), чтобы раскомментировать строку.
- Сохраните изменения.
- Перезапустите Wamp Server.
Вот и все, мы закончили!!!
Я получил эту ошибку, потому что в моем PHP (php.ini
) не было активировано расширение “cURL”. Я просто активировал это расширение и перезапустил сервер. Проблема решена.
Примечание: это похожий ответ на “Ashish Madhavacharya” выше, но конкретно решен путем активации расширения php_curl.dll
(а не openssl, которое не должно иметь отношения к этой ошибке).
HTTP API WordPress разработан таким образом, чтобы работать на как можно большем количестве серверов, используя разные методы (транспорты) для этого.
Согласно сообщению об ошибке, нет работающих транспортов, и, следовательно, WordPress не может выполнять исходящие HTTP-запросы.
Я рекомендую установить какой-либо плагин WordPress, например, Core Control, который позволяет отлаживать все существующие HTTP-транспорты. Вполне возможно, что один транспорт не работает, тогда как другой может быть в порядке. Этот плагин позволяет отключить неработающий и протестировать HTTP API с новым транспортом.
Если окажется, что действительно ни один из транспортов не работает, вам следует связаться с вашим хостинг-провайдером, чтобы, по крайней мере, установить что-то вроде cURL на сервере, чтобы можно было выполнять HTTP-запросы в PHP.
У меня была такая же проблема, и вышеуказанные решения не помогли. Я нашел страницу на форуме WAMP, где кто-то решил её обновлением до последней версии Apache. Я попробовал это, и у меня получилось.
Советы по этому сообщению об ошибке довольно разные, и никто, похоже, не предоставляет исчерпывающего ответа (см. какой-то блог, ответ с ошибками и здесь и здесь на SO). Надеюсь, это более формальный подход к проблеме.
Я рассматриваю только 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
для загрузки плагинов/тем и т.д. Ошибка “Нет транспортов” указывает на то, что ни одна из библиотек не настроена правильно в Apache или PHP. Также возможно, что ваш брандмауэр вмешивается в этот процесс.
Проверка
Проверьте конфигурацию как Apache, так и PHP, настроив и загрузив стандартный скрипт PHPinfo через ваш браузер. Он должен содержать отдельный раздел cURL
, в котором должны отображаться различные сведения. В противном случае настройте и загрузите следующий скрипт для проверки.
<?php
echo 'Curl: ', function_exists('curl_init') ? 'Enabled' : 'Disabled';
?>
Я не знаю, как проверить fSockets
.
cURL
Чтобы обеспечить доступность cURL
, кажется, необходимо включить его в php.ini
.
-
Убедитесь, что
extension_dir
корректно указывает на папку с расширениямиextension_dir="ext"
(Альтернативно
extension_dir="D:PATH/TO/php/ext"
часто предлагается) -
Убедитесь, что расширение
cURL
включеноextension=curl
(
extensions=php_curl(.so|.dll)
илиextensions="PATH/TO/php_curl(.so|.dll)"
также предлагаются, возможно, для PHP<7.2) -
С PHP кажется, что библиотеки
eay32
,ssh2
иssleay32
также должны быть доступны в одном пути (с OpenSSL 1.1eay32
был переименован вcrypto-*
иssleay32
был переименован вssl-*
). На Windows для некрасивого решения можно скопировать эти библиотеки из корневой папки PHP в папкуsystem32
илиwow64
. Лучшее решение состоит в том, чтобы изменить переменную пути, включая корневую папку PHP (Лично мне нравится чистый путь, который я настраиваю по мере необходимости, но это PHP). На *nix-системах, похоже, просто нужно установить пакетphp5-curl
для вашей дистрибуции.Примечание: В комментариях на странице PHP предлагается, что можно просто добавить записи
LoadFile "PATH/TO/lib(eay32|ssh2)|ssleay32.dll"
вhttpd.conf
, ноcURL
похоже ищет эти библиотеки в одном пути, что делает это предложение бесполезным. Люди из XAmpp/Wamp избегают этого шага, так как они, похоже, размещают свою корневую папку в системном пути.
После этого перезапустите Apache. Если вы используете монитор Apache, вы должны фактически остановить и затем запустить Apache снова; это создаст новую среду для выполнения сервиса (избежав вас от перезапуска).
fSockets
Я не знаю, что необходимо для этого.
Публикую свой костыль для будущих искателей через Google:
Я скачал zip-файл плагина с сайтов соответствующих поставщиков, поместил его в /var/www/html/wp-content/plugins/
, распаковал и активировал в панели управления WordPress.
Я был вынужден сделать это потому, что после включения ;extension=openssl
в php.ini
и перезагрузки php-сервера, он не смог найти openssl.so
, несмотря на то что я скомпилировал php с флагом --with-openssl
.
Пришлось включить все эти расширения
- php_openssl
- php_sockets
- php_curl
- php_fileinfo
- php_mbstring
И перезапустить WAMP. Вы можете сделать это внутри .ini вашей версии PHP или в панели управления wamp.
.
Ответ или решение
Ошибка «Установка не удалась: загрузка не удалась. Нет рабочих транспортов» в WordPress может быть вызвана несколькими причинами, связанными в основном с конфигурацией PHP и сервера, на котором развернут сайт. Зачастую эта проблема возникает из-за отключенных или отсутствующих расширений PHP, которые необходимы для выполнения внешних HTTP-запросов, что WordPress делает при установке тем и плагинов.
Теория
WordPress для выполнения HTTP-запросов полагается на библиотеку cURL или альтернативно на fSockopen, при этом для работы этих библиотек требуется ряд PHP-расширений. Без этих транспортных механизмов, WordPress не может осуществлять выходящие HTTP-запросы, что приводит к ошибкам при установке или обновлении тем и плагинов.
Пример
Проблема может возникнуть в несколько различных сценариях:
-
Отключенные расширения PHP: Часто на локальных серверах такие расширения как
php_curl
илиphp_openssl
, которые необходимы для работы WordPress, могут быть отключены. На продакшн-серверах хостинг-провайдеры обычно обеспечивают необходимую конфигурацию, но не всегда. -
Неправильная конфигурация PHP: Если
extension_dir
– каталог, где расположены расширения PHP – неверно настроен, это может также вызвать ошибку. -
Отсутствие необходимых библиотек: Иногда, необходимых библиотек может не быть в системном пути, и это вызывает проблемы с их загрузкой.
-
Проблемы с сервером: На некоторых серверах могут быть установлены ограничения, запрещающие выполнение внешних HTTP-запросов, что может быть причиной ошибки.
Применение
Вот пошаговое руководство для решения проблемы:
-
Проверка и активация необходимых расширений PHP:
- Откройте файл
php.ini
, обычно его можно найти в каталоге, где установлен PHP. - Убедитесь, что следующие строки не закомментированы (уберите точку с запятой
;
в начале строки):extension=curl extension=openssl
- Для пользователей, работающих с локальными серверами типа Wamp, MAMP или XAMPP, это можно сделать через интерфейс управления этими серверами.
- Откройте файл
-
Проверка переменной
extension_dir
:- Найдите в
php.ini
строкуextension_dir
и убедитесь, что путь к директории указан верно. В большинстве случаев этоextension_dir="ext"
.
- Найдите в
-
Проверка системного пути для наличия необходимых библиотек:
- На серверах Windows убедитесь, что такие библиотеки как
libeay32.dll
иssleay32.dll
находятся в системной директории, или добавьте каталог PHP в переменную окружения PATH.
- На серверах Windows убедитесь, что такие библиотеки как
-
Перезапуск сервера: После всех изменений перезапустите ваш сервер, чтобы они вступили в силу.
-
Использование плагина для отладки HTTP-транспортов:
- Установите плагин Core Control для WordPress, который позволяет отлаживать и тестировать различные HTTP-транспорты. Это может помочь выявить, какой из транспортов работает неправильно, и отключить его.
-
Обращение к провайдеру хостинга:
- Если решение не найдено, возможно, стоит связаться с вашим хостинг-провайдером для проверки серверной конфигурации и установки необходимых расширений.
Подводя итог, ошибка, с которой вы столкнулись, обычно связана с конфигурацией PHP на сервере. Решением будет активация необходимых расширений, проверка конфигурационных файлов и возможная отладка с помощью специализированных плагинов. Эти шаги помогут вам обеспечить корректную функциональность вашего сайта WordPress.