You clicked install in Softaculous, watched the progress bar for a while, and then either it froze somewhere in the middle or it threw a red "Installation Failed" box at you. Either way, you're now staring at a half-built WordPress (or Joomla, or WHMCS) folder and wondering whether it's safe to try again. Here's what actually causes this and how to clear it without making a bigger mess.
Symptom
A few variations of the same underlying problem, all landing on the same screen:
- The progress bar sits at "Please Wait, Installation in progress..." for 10+ minutes with no change.
- You get a red error banner reading something like
Installation Failed!followed by a one-line reason (or sometimes no reason at all). - You try to reinstall to the same folder and Softaculous refuses with
Destination directory is not empty! - The install "completes" but the site 500s or shows a database connection error the moment you open it.
Cause
Softaculous is just a wrapper — it downloads the script, creates a database, writes a config file, and runs any install routines the script needs. When one of those steps can't complete, it either hangs waiting on a response or bails out with an error. The usual culprits, roughly in order of how often we see them:
| Cause | What's actually happening |
|---|---|
| Disk quota exceeded | The account has no room left to write files, so extraction stops partway through |
| Database limit reached | Shared hosting plans cap the number of MySQL databases; Softaculous can't create a new one |
| Directory not empty | Leftover files from a previous failed attempt, or a placeholder index.html, block a clean install |
| PHP version mismatch | The domain is set to a PHP version the script doesn't support (too old or too new) |
| mod_security blocking the request | A WAF rule flags the install POST request as suspicious and drops it mid-transaction |
| Timeout on large scripts | Scripts like WHMCS or Magento run long install routines that exceed max_execution_time |
| Stuck progress bar (false alarm) | The install actually finished; the browser just lost the AJAX poll that reports status |
Fix
1. Check whether it actually finished first
Before you touch anything, rule out the false alarm. Open File Manager (or SSH in) and look at the target folder:
cd ~/public_html/yourfolder
ls -laIf you see a populated wp-config.php (or equivalent config file for the script you installed) and a full set of core files, the install completed — the progress bar just never got the "done" signal, usually because of a CDN or proxy buffering the AJAX response. Load the site directly; if it works, you're done, no cleanup needed.
2. Read the actual error, not just the banner
In cPanel, go to Softaculous Apps Installer > History (top-right clock icon). Click the failed entry — the expanded view usually has the real error, which the initial red banner truncates. Look for phrases like "quota exceeded," "Access denied for user," or a mod_security rule ID.
3. Clear disk quota first — it's the most common cause
cPanel home screen > Disk Usage. If you're above ~90%, Softaculous will fail extraction partway through, which is exactly the "stuck at 40%" behavior people report. Delete old backups, log files, or unused installs before retrying:
du -sh ~/public_html/* | sort -rh | head -104. Check your database count against your plan's limit
cPanel home > look at the "Databases" stat in the left sidebar (or under MySQL® Databases). If you're at the cap, Softaculous's CREATE DATABASE step fails silently on some configs. Drop a database you're no longer using, or ask support to raise the limit if you're on a plan that allows it.
5. Clean out the target directory completely
A failed install often leaves partial files behind, and Softaculous refuses to overwrite a non-empty folder on the next attempt:
rm -rf ~/public_html/yourfolder/*
rm -rf ~/public_html/yourfolder/.??*The second line catches dotfiles like a leftover .htaccess or .user.ini that * alone won't match. Then also delete the orphaned database and database user from MySQL® Databases if one was created before the failure — otherwise the retry may collide with it.
6. Match the PHP version to what the script needs
Softaculous lists the required PHP version on the script's overview page before you install. Go to MultiPHP Manager, select the domain, and set it to a supported version (most current scripts want 8.1+; a handful of older ones still need 7.4). Save, then retry the install.
7. Rule out mod_security
If the History log mentions a blocked request or you see a generic failure with no clear reason, check ModSecurity™ Tools in cPanel for hits around the install timestamp. If a rule fired against the install request, you can temporarily disable ModSecurity for that domain, run the install, and re-enable it once it's done — don't leave it off.
8. For big scripts, raise the PHP time limit before you start
WHMCS, Magento, and similar heavier installers can outrun the default execution window. In MultiPHP INI Editor, bump these for the domain before installing, then set them back afterward if you don't need them long-term:
max_execution_time = 300
memory_limit = 512MPrevention
- Keep at least 10-15% of your disk quota free — Softaculous, backups, and cache all compete for that headroom.
- Install into a genuinely empty folder. Delete the default
index.htmlplaceholder first if you're targeting a fresh subfolder. - Check the script's required PHP version on its Softaculous overview page before clicking install, not after it fails.
- Don't run two Softaculous installs at the same time on a shared account — they can race for the same temp directory and database slot.
- Turn on the installation email notification in Softaculous's install form so you get a copy of the real error if something goes wrong while you're not watching the screen.
Most "stuck" installs turn out to be either a quota problem or a leftover folder from a prior attempt — both are quick to clear once you know where to look. If you've worked through this list and it's still failing, grab the exact error text from the History log; that's what support needs to pinpoint it fast instead of guessing.