Error: Falló la instalación: Error en la descarga. No se encontraron transportes en funcionamiento
'Falló la instalación: Error en la descarga. No se encontraron transportes en funcionamiento'.
Este mensaje de error apareció cuando intenté instalar un tema en WordPress. ¿Cómo puedo resolver este problema?

El sitio de WordPress funcionaba en su mayoría sin problemas, excepto en una sección del panel de administración, donde tenía algunos problemas para actualizar o instalar. Cuando intenté instalar un tema, me dio el error "Instalación fallida: Descarga fallida. No se encontraron transportes funcionales".
Afortunadamente, solucioné el problema con la siguiente solución.
Resulta que este mensaje de error ocurre cuando faltan extensiones en el servidor de desarrollo, por lo que WordPress no puede realizar solicitudes HTTP externas.
La solución es bastante simple. Las extensiones faltantes que permiten esas solicitudes HTTP ya están instaladas con Wamp Server, pero por defecto están deshabilitadas. Para habilitarlas, necesitamos editar el archivo de configuración php.ini.
Editando el archivo php.ini
El archivo php.ini contiene una lista de muchas extensiones, algunas deshabilitadas por defecto. La única que tuve que habilitar fue la extensión openssl.
A continuación, los pasos para habilitar esa extensión:
- Inicia Wamp Server.
- Haz clic en el ícono de Wamp Server y ve a PHP->php.ini.
- Haz doble clic en php.ini para abrirlo en tu editor de texto predeterminado.
- Busca php_openssl.dll en el archivo php.ini. ->Verás que la extensión está comentada: ;extension=php_openssl.dll
- Descomenta esa línea eliminando el punto y coma (;).
- Guarda los cambios.
- Reinicia Wamp Server.
¡Eso es todo! ¡Hemos terminado!

En mi servidor Wamp (PHP 7) la extensión se llama simplemente openssl, no php_openssl. Al descomentar la línea ;extension=openssl
según tus instrucciones, resolví este problema para mí, ¡gracias!

Estaba recibiendo este error porque mi PHP (php.ini
) no tenía la extensión "cURL" activada. Simplemente activé esta extensión y reinicié el servidor. Problema resuelto.
Nota: esta es una respuesta similar a la de "Ashish Madhavacharya" mencionada arriba, pero específicamente se resolvió activando la extensión php_curl.dll
(y no la extensión openssl, que no debería tener nada que ver con este error que estás recibiendo).

La API HTTP de WordPress ha sido construida de manera que funcione en la mayor cantidad de servidores posible, probando diferentes métodos (transports) para lograrlo.
Según el mensaje de error, no hay transportes funcionales y por lo tanto WordPress no puede realizar ninguna solicitud HTTP saliente.
Te recomendaría instalar algo como el plugin de WordPress Core Control, que te permite depurar todos los transportes HTTP existentes. Es bastante posible que, mientras un transporte no funcione, otro pueda estar bien. Este plugin te permite desactivar el que no funciona y probar la API HTTP con el nuevo transporte.
Si resulta que efectivamente ninguno de los transportes funciona, deberías contactar a tu proveedor de hosting para que al menos instale algo como cURL en el servidor para que puedas realizar solicitudes HTTP en PHP.

Los consejos sobre este mensaje de error son bastante variados y nadie parece proporcionar una respuesta exhaustiva (ver algunos blogs, una respuesta duplicada y aquí y aquí en SO). Espero que este sea un enfoque más formal del problema.
Solo considero WordPress en PHP servido a través de Apache (no puedo comentar sobre NginX en este momento ya que no lo he probado con PHP, ni tampoco sobre otros frameworks). La respuesta puede mostrar un leve sesgo hacia Windows 10 con un Apache 2.4.37 compilado manualmente, PHP 7.2 thread safe extraído y WordPress 4.2.X.
Antecedentes
PHP y cURL explica, bastante bien por cierto, que bajo el capó WordPress depende de Requests
, un envoltorio alrededor de las bibliotecas cURL
y fSockets
. Requests
prefiere la biblioteca cURL
si está disponible, pero supuestamente recurrirá a la biblioteca fSockets
para descargar plugins, temas, etc. El error "No transports" indica que ninguna de las bibliotecas está configurada correctamente dentro de Apache o PHP. También es posible que el firewall esté interfiriendo con el proceso.
Verificación
Prueba la configuración tanto de Apache como de PHP configurando y cargando el script estándar PHPinfo desde tu navegador. Este debería tener una sección separada titulada cURL
cuyas entradas muestran diversa información. De lo contrario, configura y carga el siguiente script para verificar.
<?php
echo 'Curl: ', function_exists('curl_init') ? 'Habilitado' : 'Deshabilitado';
?>
No sé cómo probar fSockets
.
cURL
Para garantizar la disponibilidad de cURL
, parece necesario habilitarlo dentro de php.ini
.
Asegúrate de que
extension_dir
apunte correctamente a la carpeta de extensionesextension_dir="ext"
(Alternativamente,
extension_dir="D:RUTA/A/php/ext"
es una sugerencia común)Asegúrate de que la extensión
cURL
esté habilitadaextension=curl
(
extensions=php_curl(.so|.dll)
oextensions="RUTA/A/php_curl(.so|.dll)"
también se sugieren, posiblemente para PHP<7.2)Según PHP, parece que las bibliotecas
eay32
,ssh2
yssleay32
también deben estar disponibles en la ruta del sistema (Con OpenSSL 1.1,eay32
se renombró acrypto-*
yssleay32
se renombró assl-*
). En Windows, el truco feo es copiar estas bibliotecas desde la carpeta raíz de PHP a la carpetasystem32
owow64
. La mejor solución es modificar la variable de ruta del sistema para incluir la carpeta raíz de PHP (Personalmente prefiero una ruta limpia que configuro según sea necesario, pero esto es PHP). En sistemas *nix, parece que solo se necesita instalar el paquetephp5-curl
para la distribución.Nota: Los comentarios en la página de PHP sugieren que se pueden agregar entradas
LoadFile "RUTA/A/lib(eay32|ssh2)|ssleay32.dll"
al archivohttpd.conf
, perocURL
parece buscar estas bibliotecas en la ruta del sistema; lo que hace que la sugerencia sea discutible. Los usuarios de XAMPP/WAMP se salvan de este paso porque parecen incluir su propia ruta raíz en la ruta del sistema.
Una vez hecho esto, reinicia Apache. Si estás usando Apache Monitor, deberías detener y luego iniciar Apache; esto configura un nuevo entorno para que se ejecute el servicio (ahorrándote un reinicio del sistema).
fSockets
No sé qué es necesario para que esto funcione.

Tenía el mismo problema y las soluciones anteriores no funcionaron. Encontré una página en el foro de WAMP donde alguien lo resolvió actualizando a la última versión de Apache. Lo probé y funcionó para mí.

Publico mi solución aquí para futuros buscadores de Google:
Descargué el archivo zip del plugin desde los sitios de los respectivos proveedores, lo coloqué en /var/www/html/wp-content/plugins/
, lo descomprimí y lo activé desde el panel de control de WordPress.
Me vi obligado a hacer lo anterior porque una vez que habilité ;extension=openssl
desde php.ini
y reinicié el servidor php, no pudo localizar el openssl.so
aunque compilé php con la bandera --with-openssl
.
