These two errors almost always come from the same root cause: PHP can't write to a folder it needs to write to. "Unable to create directory" shows up when WordPress tries to make a new folder (a plugin install, a theme update, an upload subfolder), and "unable to move uploaded file" shows up when WordPress can't move a file from PHP's temp location into wp-content/uploads. Fix the permissions or ownership on the target folder and both errors usually disappear.
Check permissions first
The standard convention for WordPress directories and files is 755 on directories and 644 on files. If a folder was created with the wrong permissions (common after a manual FTP upload, or a migration from another host), WordPress can read it but can't write into it.
- Connect via FTP or open File Manager in cPanel.
- Navigate to
wp-content/uploads. - Check the permissions on the
uploadsfolder itself, and on the year/month subfolders inside it (e.g.2026/09). - Set directories to
755and files to644. In most FTP clients this is a right-click "File permissions" or "Attributes" dialog with a numeric field.
On most hosting accounts you also have shell access, so the same fix works from SSH:
find /home/youruser/public_html/wp-content -type d -exec chmod 755 {} \;
find /home/youruser/public_html/wp-content -type f -exec chmod 644 {} \;
Avoid 777. It's a common "quick fix" suggestion online, but it makes the folder world-writable, which is a security problem, not a permissions fix. 755/644 is correct and sufficient.
Check ownership
Sometimes the permissions are correct but the folder is owned by the wrong user, usually left over from a manual migration or a restore where files were extracted under a different account than the one PHP runs as. If permissions look right and the error persists, ownership is the next suspect.
Via SSH, check who owns the uploads folder:
ls -la wp-content/uploads
The owner should match your hosting account's username, not root or another account. If it's wrong, fix it (adjust the path and user to match your account):
chown -R youruser:youruser wp-content/uploads
If you don't have shell access, re-uploading the affected folder fresh via FTP usually resets ownership to your account correctly, since FTP writes files as the account you're logged in as.
Check disk space
A full disk produces exactly these errors, and it's easy to overlook because the message talks about permissions, not space. WordPress can create the directory entry but fails partway through writing the file, and the error it surfaces is misleading.
Check your disk usage in cPanel under Disk Usage, or from SSH:
df -h
If you're near your plan's limit, clear space before doing anything else: old backups sitting in public_html, an oversized debug.log file, unused plugin/theme folders, or stale media in uploads that's no longer referenced. Large debug logs are a common silent culprit if you've had WP_DEBUG_LOG enabled for a while; check wp-content/debug.log's size specifically.
If uploads still fail after fixing all three
Two less common causes worth ruling out:
- PHP's temp directory. "Unable to move uploaded file" specifically can mean PHP's own temp upload location is misconfigured or unwritable, separate from your
uploadsfolder. This is rare on our stack but worth a ticket if the first three checks come back clean. - Upload size limits. If the error only happens on larger files, check
upload_max_filesizeandpost_max_sizein cPanel → Software → MultiPHP INI Editor. A file larger than the configured limit can fail in a way that looks like a permissions error in the WordPress admin, even though the real cause is the size cap. If it turns out to be a memory limit instead of an upload limit, see fixing WordPress allowed memory size exhausted errors.
If you've confirmed permissions are 755/644, ownership matches your account, disk space isn't the issue, and the error still happens, open a ticket through Support → New ticket in the portal. A real person will check the server-level configuration for your account, which isn't something you can diagnose from cPanel alone.