10

'Installation failed: Download failed. No working transports found'.

This error mess came up when I tried to install a theme in WordPress. How do I solve this problem?

  • do you have the same error when you install a plugin ? – mmm Jan 25 '18 at 11:02
13

The WordPress site was mostly working without a problem except in a dashboard section of the site, where it was having some issues with updating or installing. When I tried to install theme,it gave me error "Installation failed: Download failed. No working transports found".

Fortunately, i fixed the problem with following solution.

It turns out, this error message occurs when there are missing extensions on a development server, so the WordPress is unable to make external HTTP requests.

The solution is pretty simple. The missing extensions that make those HTTP requests possible are already installed with Wamp Server, By default,they are just disabled. To enable them, we need to edit the php.ini configuration file.

Editing php.ini file

The php.ini file contains a list of many extensions with some of them disabled by default. The only one I had to enable was the openssl extension.

Here are the steps to enable that extension:

  1. Start Wamp Server.
  2. click on Wamp Server Icon and move to PHP->php.ini option.
  3. double click on php.ini. so, it will open php.ini file in your default Text Editor.
  4. search for php_openssl.dll in php.ini file. ->You Will see that the extension is commented out: ;extension=php_openssl.dll
  5. Uncomment that line by removing semi colon(;)
  6. save the changes.
  7. Restart Wamp Server.

That's it We Are Done!!!

3

The WordPress HTTP API has been built in such a way that it works on many servers as possible, trying out different ways (transports) to do so.

According to the error message, there are no working transports and thus WordPress is not able to make any outgoing HTTP requests.

I'd recommend you to install something like the Core Control WordPress plugin, which allows you to debug all the existing HTTP transports. It's quite possible that while one transport is not working, another might be OK. This plugin allows you to disable the broken one and test the HTTP API with the new transport.

If it turns out that indeed none of the transports are working, you should contact your hosting provider to at least install something like cURL on the server so you can make HTTP requests in PHP.

0

The advice on this error message is quite varied and no one seems to provide a comprehensive answer (See some blog, a duplicitous answer and here and here on SO). Hopefully this is a more formal take on the problem.

I consider only WordPress on PHP served via Apache (I can not comment on NginX at this time as I haven't tried it with PHP, nor can I comment upon other frameworks). The answer may exhibit a mild bias towards Windows 10 with a self built Apache 2.4.37, extracted thread safe PHP 7.2 and WordPress 4.2.X.

Background

PHP and cURL explains, rather nicely one might add, that under the hood WordPress relies upon Requests, a wrapper around the cURL and fSockets libraries. Requests prefers the cURL library if available but will supposedly fall back to the fSockets library to download Plugins/Themes/etc. The "No transports" error is indicative that neither library is properly configured within either Apache or PHP. It is also possible ones firewall is interfering with the process too.

Check

Test the configuration of both Apache and PHP setting up and loading the standard PHPinfo script from your browser. This should have a separate section entitled cURL whose entries show various information. Otherwise setup and load the following script to check.

<?php
echo 'Curl: ', function_exists('curl_init') ? 'Enabled' : 'Disabled';
?>

I do not know how to test fScokets.

cURL

To ensure the availability of cURL is seems necessary to enable it within php.ini.

  • Ensure that the extentions_dir correctly points to ones extensions folder

    extentions_dir="ext"

    (Alternatively extentions_dir="D:PATH/TO/php/ext" is often suggested)

  • Ensure that the cURL extention is enabled

    extension=curl

    (extentions=php_curl(.so|.dll) or extentions="PATH/TO/php_curl(.so|.dll)" are also suggested, possibly for PHP<7.2)

  • From PHP it seems that the eay32, ssh2 and ssleay32 libraries must also be available upon ones path (With OpenSSL 1.1 eay32 was renamed crypto-* and ssleay32 was renamed ssl-*). Upon windows the ugly hack is to copy these libraries from the PHP root folder into the system32 or wow64 folder. The better solution is to modify ones path variable to include the PHP root folder (Personally I prefer a clean path that I configure as required but this is PHP). On *nix boxes it seems one simply needs to install the php5-curl package for ones distro.

    Note : The comments on the PHP page suggest that one may simply add LoadFile "PATH/TO/lib(eay32|ssh2)|ssleay32.dll" entries to ones httpd.conf but cURL seems to search for these libraries upon ones path; mooting the suggestion. The XAmpp/Wamp people get away with this step as they seem to dump their own root on ones system path.

Once done restart Apache. If you're using Apache monitor you should actually stop and then start Apache; this sets up a new environment for the service to run in (Saving you a restart).

fSockets

I do not know what is necessary to get this going.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.