More fixes

"Download failed. No working transports found"

You click Install or Update on a plugin, theme or WordPress itself and get "Download failed. No working transports found." It is not the plugin and not your internet connection. WordPress fetches files through PHP on the server, and PHP has neither of its two ways to make a secure web request: the cURL extension, or PHP's own streams with OpenSSL. Usually one extension was switched off, often by a PHP version change. Here is how to confirm it and turn it back on.

What the owner sees

example-bakery.com/wp-admin/plugin-install.php

What the checks found


  

Why it happened (five minutes)

  1. Did the PHP version just change? Moving from PHP 7.4 to 8.x (by you, or by the host on a schedule) gives you a fresh set of extensions. If cURL and OpenSSL were ticked for the old version and not for the new one, every download fails from that day on. This is the most common cause.
  2. Read it in Site Health. Tools, Site Health, Info, Server. Look at cURL version: "Not available" is your answer. The Status tab may also show "One or more required modules are missing" naming curl or openssl.
  3. Is cURL there but blocked? Some hosts list curl_exec or curl_multi_exec under disable_functions for security. phpinfo() shows that line; WordPress then treats cURL as unusable.
  4. Is it a different message? "User has blocked requests through HTTP" means WP_HTTP_BLOCK_EXTERNAL is set in wp-config.php. "cURL error 28" or "cURL error 60" means cURL works and the request itself fails: see the guides linked below.

Fix it, safest first

  1. cPanel hosts: Select PHP Version (or MultiPHP / PHP Selector), pick the version the site runs, open Extensions and tick curl and openssl. Save, then reload the plugin page and try again.
  2. Plesk: Domains, your site, PHP Settings, and check the same two extensions are enabled for the handler the site uses.
  3. Your own server (VPS): install the package for the exact PHP version, for example php8.2-curl, then restart PHP-FPM or Apache. Installing it for the command-line PHP only does not help the website.
  4. If disable_functions lists curl functions, ask the host to allow curl_exec and curl_multi_exec for your account, or turn on allow_url_fopen with OpenSSL so WordPress can use streams instead.
  5. Confirm. Site Health, Info, Server should now show a cURL version, and an install from the plugin screen should finish.
  6. Need the update today and the host is slow? Download the plugin zip on your computer and upload it with Plugins, Add New, Upload Plugin, or over SFTP. That gets you past one update, not the next one, and WordPress's own security updates still need the fix above.

What you see, what it means, what it needs

What you seeWhat it meansUsual fix
Started right after a PHP version changeNew PHP version lacks the curl/openssl extensionsTick curl and openssl for that version
Site Health: cURL version "Not available"cURL extension not loadedEnable it, or install php<version>-curl and restart PHP
cURL listed, error still showscurl functions disabled by the hostHost allows them, or allow_url_fopen + OpenSSL
"User has blocked requests through HTTP"WP_HTTP_BLOCK_EXTERNAL is on in wp-config.phpRemove it or add WordPress.org to WP_ACCESSIBLE_HOSTS
"cURL error 28: Operation timed out"cURL works, the request is blocked or slowSee cURL error 28
"cURL error 60: SSL certificate problem"cURL works, the certificate check failsSee cURL error 60

What not to do

Most cases are two ticked boxes in the host's PHP settings. If you have no such screen, or the host will not change it, that is what the box below is for. Related: installation or update failed, automatic update failed, cURL error 28.