WordPress Upload Folder Is Not Writable, WordPress failed to write file to disk, Unable to create directory WordPress, WordPress file permissions, WordPress uploads directory not writable, WordPress media upload failed, Fix WordPress upload folder permissions

WordPress Upload Folder Is Not Writable? 14 Fixes to Restore Uploads

In this guide, you’ll learn exactly why the WordPress upload folder is not writable and how to fix it from every angle. Whether you’re dealing with a permissions error, an ownership mismatch, a corrupted upload path, or a server-level restriction, you’ll get a step-by-step solution.

By the end, you’ll be able to upload images, install plugins, and export data without ever seeing that dreaded red error message again.

Quick Fix

If you see the error “Upload folder is not writable. Export and file upload features will not be functional,” start here: go to Tools → Site Health → Info → Filesystem Permissions and check if your uploads directory is listed as Not writable.

If so, use your hosting File Manager or FTP client to set the wp-content/uploads folder permissions to 755. In most cases, this single change fixes the issue immediately.

What This Error Means

When the “Upload folder is not writable” error appears, WordPress is telling you that it cannot write new files to your server’s filesystem. This affects:

  • Media uploads: You can’t add images, videos, or documents to the Media Library
  • Plugin installations: WordPress can’t extract and write plugin files
  • Theme uploads: You can’t install new themes via the WordPress dashboard
  • Automatic updates: WordPress can’t update core, plugins, or themes automatically
  • Export features: Tools like Gravity Forms or WooCommerce can’t export data
  • Cache file generation: Caching plugins can’t write cache files

This error typically appears as a red notification in your WordPress dashboard or as a message when you try to upload a file: “Unable to create directory uploads/2026/08. Is its parent directory writable by the server?”

The root cause is almost always a mismatch between what WordPress expects and what your server allows. WordPress needs specific permissions to create, read, and modify files, and when those permissions are wrong, everything that involves writing files breaks.

Common Causes

Incorrect File Permissions (755/644)

The most common cause is incorrect file permissions. WordPress needs folders to be set to 755 and files to 644. If your uploads folder is set to 644 (a common mistake), WordPress can’t create new subdirectories for year/month uploads. If it’s set to 777, it may work, but it opens a massive security vulnerability.

Wrong File Ownership

Your web server runs as a specific user (like www-data on Apache/Nginx, or nobody on some shared hosts). If the uploads folder is owned by a different user (for example, your FTP account), the web server can’t write to it, even if permissions are set to 755. This is especially common after server migrations or when files are uploaded via FTP instead of WordPress itself.

Corrupted or Hard-Coded Upload Path

WordPress stores your upload path in the wp_options database table under the key upload_path. If you migrated from another host, this path may still point to the old server’s directory structure (e.g., /home/olduser/public_html/wp-content/uploads). When the path doesn’t exist on the new server, WordPress reports it as not writable, even if the actual folder has perfect permissions.

Server Disk Space Full

If your hosting account has run out of disk space, WordPress literally has nowhere to write new files. The error message is the same as a permissions issue, but no amount of permission changes will fix it until you free up space or upgrade your plan.

PHP Safe Mode or open_basedir Restrictions

Some hosts restrict PHP’s ability to access files outside a specific directory using open_basedir. If this restriction blocks WordPress from reaching the uploads folder, or if PHP Safe Mode is enabled, file operations will fail regardless of permissions.

Missing Uploads Directory

If the wp-content/uploads folder was accidentally deleted, or if it was never created during installation, WordPress has nowhere to store uploaded files. This is common on fresh installs or after manual cleanups.

WordPress Temporary Folder Full

When you upload a file, WordPress first stores it in a temporary folder on the server before moving it to wp-content/uploads. If this temp folder is full or inaccessible, the upload fails with a “not writable” error, even though the uploads folder itself is fine.

Hosting Plan Disk Limit Reached

Shared hosting plans often have strict disk space limits. If you’ve reached your quota, WordPress can’t write new files. This is different from a full server disk; it’s an account-level limit set by your host.

Mod_php vs. PHP-FPM Ownership Mismatch

If your server runs PHP as an Apache module (mod_php), the web server and PHP run as different users. This can create ownership conflicts where WordPress can read files but not write them. PHP-FPM and FastCGI configurations handle ownership more cleanly, but misconfigurations can still cause issues.

Multisite Upload Path Misconfiguration

On WordPress Multisite networks, each site gets its own subdirectory under wp-content/uploads/sites/. If the network’s upload path settings are misconfigured, or if site IDs don’t match their folder names, uploads fail for individual sites.

.htaccess Blocking Uploads

A corrupted or overly restrictive .htaccess file in your wp-content or uploads directory can block write operations or prevent PHP from executing in the uploads folder.

Plugin Conflicts (Especially Gravity Forms)

Some plugins, most notably Gravity Forms, display their own “Upload folder is not writable” message when they can’t write to the uploads directory. This message can appear even when WordPress core uploads work fine, because the plugin may be checking a specific subdirectory that doesn’t exist yet.

Before You Start

Before applying fixes, confirm the scope:

  1. Check Site Health: Go to Tools → Site Health → Info → Filesystem Permissions. This tells you exactly which directories are writable and which are not.
  2. Note recent changes: Did you migrate from another host, change hosting plans, update WordPress, or modify file permissions recently?
  3. Check if it’s all uploads or just one: Can you upload small images but not large ones? Can you install plugins? This helps distinguish between permissions and disk space issues.
  4. Back up your site: Before changing file permissions, ownership, or database values, create a full backup.

Step-by-Step Solutions

Fix 1: Check File Permissions via Site Health

This is your diagnostic starting point.

  1. Log into your WordPress Dashboard.
  2. Go to Tools → Site Health.
  3. Click the Info tab.
  4. Scroll down to Filesystem Permissions.
  5. Look for the Uploads directory entry.
  6. It should say Writable. If it says Not writable, proceed to the permission fixes below.

Fix 2: Fix Permissions via cPanel File Manager

This is the easiest method for most users.

  1. Log into your cPanel (or hosting control panel).
  2. Open File Manager.
  3. Navigate to public_html/wp-content (or your WordPress root).
  4. Find the uploads folder.
  5. Right-click it and select Change Permissions (or Permissions).
  6. Set the permissions to 755:
    • Owner: Read, Write, Execute (7)
    • Group: Read, Execute (5)
    • Public: Read, Execute (5)
  7. Click Save.
  8. If the uploads folder contains subfolders (like 2026 or 08), apply 755 to those too.

Fix 3: Fix Permissions via FTP (FileZilla)

  1. Connect to your server via FTP/SFTP using FileZilla or your preferred client.
  2. Navigate to /wp-content.
  3. Right-click the uploads folder and select File Permissions.
  4. Enter 755 in the numeric value field.
  5. Check the box “Recurse into subdirectories” and select “Apply to directories only”.
  6. Click OK.
  7. Now right-click the uploads folder again, select File Permissions, enter 644, check “Recurse into subdirectories”, and select “Apply to files only”.
  8. Click OK.

Fix 4: Fix Permissions via SSH

If you have SSH access, this is the fastest and most reliable method.

  1. Connect to your server via SSH.
  2. Navigate to your WordPress directory: cd /path/to/wordpress
  3. Set all directories to 755: find . -type d -exec chmod 755 {} \;
  4. Set all files to 644: find . -type f -exec chmod 644 {} \;
  5. Lock down wp-config.php: chmod 600 wp-config.php

Fix 5: Fix File Ownership via SSH

If permissions are correct but uploads still fail, ownership is the issue.

  1. Via SSH, check current ownership: ls -la wp-content/uploads
  2. If the owner is not your web server user (commonly www-data for Apache/Nginx on Ubuntu/Debian, or apache on CentOS), fix it: sudo chown -R www-data:www-data /path/to/wordpress
  3. Replace www-data with your actual web server user if different. Check with your host if unsure.
  4. If you don’t have root/sudo access, contact your hosting provider and ask them to set the correct ownership.

Fix 6: Create the Uploads Directory Manually

If the uploads folder is missing entirely:

  1. Via File Manager or FTP, navigate to wp-content.
  2. Create a new folder named uploads.
  3. Set its permissions to 755.
  4. Inside uploads, create folders for the current year and month (e.g., 2026 and inside that 08).
  5. Set those folders to 755 as well.
  6. Test uploading a file in WordPress.

Fix 7: Clear the Hard-Coded Upload Path

After a migration, WordPress may still point to the old server’s path.

  1. Go to your WordPress admin and visit this URL: yoursite.com/wp-admin/options.php
  2. Use Ctrl+F to search for upload_path.
  3. If it has a value (like an absolute server path), delete the entire value and leave the field blank.
  4. Also search for upload_url_path and clear its value if it contains an old URL.
  5. Scroll to the bottom and click Save Changes.
  6. WordPress will now use the default wp-content/uploads path.

Alternative method via phpMyAdmin:

  1. Log into phpMyAdmin.
  2. Select your WordPress database.
  3. Open the wp_options table.
  4. Find the rows named upload_path and upload_url_path.
  5. Edit each row and delete the value in the option_value field.
  6. Click Go to save.

Fix 8: Add FS_METHOD to wp-config.php

This forces WordPress to write files directly instead of using FTP credentials.

  1. Open wp-config.php in your WordPress root.
  2. Add this line above /* That's all, stop editing! Happy publishing. */: define('FS_METHOD', 'direct');
  3. Save the file.
  4. Also add these lines to ensure consistent permissions: define('FS_CHMOD_DIR', 0755); define('FS_CHMOD_FILE', 0644);
  5. Save and test uploads again.

Fix 9: Check and Free Up Disk Space

  1. Log into your hosting control panel and check your disk usage.
  2. If you’re at or near your limit:
    • Delete old backups, logs, or unused media files
    • Remove inactive themes and plugins
    • Clear cache folders that have grown too large
    • Optimize your database
  3. If you can’t free up enough space, upgrade your hosting plan.

Fix 10: Empty the WordPress Temporary Folder

The temp folder is not accessible via FTP; you need your host’s help.

  1. Contact your hosting provider’s support.
  2. Ask them to check and clear the PHP temporary upload folder on your server.
  3. Also ask them to verify that the temp folder is writable by the web server user.

Fix 11: Fix PHP Safe Mode / open_basedir

  1. Check if PHP Safe Mode is enabled. If it is, ask your host to disable it; it’s deprecated and causes widespread file operation failures.
  2. Check for open_basedir restrictions in your hosting panel or php.ini.
  3. If open_basedir is restricting access outside a specific path, ask your host to adjust it to include your WordPress directory.
  4. Alternatively, add this to yours .user.ini or php.ini (if your host allows it): open_basedir = none

Fix 12: Fix Multisite Upload Paths

  1. Go to Network Admin → Settings → Network Settings.
  2. Check the Uploads settings.
  3. Ensure the upload path uses a server-relative path (e.g., /home/username/public_html/wp-content/uploads) and the upload URL uses the full URI (e.g., https://example.com/wp-content/uploads).
  4. Don’t manually add /sites/1/WordPress handles subsite folders automatically.

Fix 13: Check for Plugin Conflicts

  1. Go to Plugins → Installed Plugins.
  2. Deactivate all plugins except WordPress core.
  3. Try uploading a file.
  4. If it works, reactivate plugins one by one until uploads fail again.
  5. When you find the conflicting plugin, keep it deactivated and contact the developer.

Fix 14: Contact Your Hosting Provider

If none of the above fixes work, the issue is likely at the server level:

  • Your host may have a server-wide security module (like ModSecurity) blocking file writes
  • The server may be running mod_php with mismatched ownership
  • Your account may have hit an invisible file count limit (not disk space, but number of files)
  • The host may need to run chown or chmod commands you don’t have permission to run

Contact support with your Site Health report and describe exactly what you’ve tried.

Common Mistakes

MistakeWhy
Setting permissions to 777777 allows anyone to read, write, and execute files. This is a massive security risk and can get your site hacked. Always use 755 for folders and 644 for files.
Only fixing the uploads folder, not subfoldersWordPress creates year/month subfolders inside uploads. If those are 644, uploads to specific months will still fail. Apply permissions recursively.
Changing permissions without checking ownershipCorrect permissions with wrong ownership still block writes. Always verify both.
Editing wp-config.php without a backupOne typo in wp-config.php can break your entire site. Always back up before editing.
Assuming it’s a permissions issue when disk is fullIf your server is out of space, no permission change will help. Check disk usage first.
Leaving a hard-coded upload_path after migrationThe old path from your previous host will never work on the new server. Always clear upload_path in wp_options after migrating.

Advanced Fixes

Fix Ownership with chown

If you have root SSH access and the web server user is different from the file owner:

sudo chown -R www-data:www-data /var/www/html/wordpress
sudo chmod -R 755 /var/www/html/wordpress/wp-content/uploads

Replace www-data with your actual web user and /var/www/html/wordpress with your actual WordPress path.

Fix Symbolic Link Issues After Migration

If you changed usernames during a migration (e.g., from olduser to newuser), WordPress may still look for the old path.

  1. Check Tools → Site Health → Info → Directories and Sizes to see what path WordPress thinks it’s using.
  2. If it shows the old username, either update the upload_path in the database or create a symbolic link: ln -s /home/newuser /home/olduser
  3. The symbolic link is a quick fix, but updating the database path is the cleaner long-term solution.

Reset Upload Path via phpMyAdmin

  1. Log into phpMyAdmin.
  2. Select your WordPress database.
  3. Open the wp_options table.
  4. Find upload_path and upload_url_path.
  5. Click Edit on each row.
  6. Delete the value in option_value and click Go.
  7. WordPress will revert to the default wp-content/uploads directory.

Check for mod_php Conflicts

If your server runs mod_php instead of PHP-FPM, the PHP process runs as a different user than the web server. This causes ownership conflicts.

  1. Ask your host whether they use mod_php or php-fpm.
  2. If it’s mod_php, ask them to switch to PHP-FPM or FastCGI, which handle file ownership more cleanly.
  3. Alternatively, ask them to configure mod_php to run as your account user (via SuPHP or mod_suexec).

Prevention Tips

  • Never use 777 permissions: Stick to 755 for folders and 644 for files. Use 600 for wp-config.php.
  • Check Site Health monthly: Make it a habit to review Tools → Site Health → Filesystem Permissions to catch issues early.
  • Clear upload_path after every migration: Always delete the hard-coded upload path from wp_options when moving to a new host.
  • Use PHP-FPM when possible: It handles ownership better than mod_php and reduces permission conflicts.
  • Monitor disk space: Set up alerts with your host so you never hit your storage limit unexpectedly.
  • Back up before permission changes: Always create a full backup before modifying file permissions or ownership.
  • Don’t edit files as root: If you use SSH, avoid creating or editing WordPress files as the root user. Use your web server user or your account user.
  • Test uploads after major changes: After migrating, updating, or changing hosts, immediately test a media upload to confirm everything works.

Related Guides

Frequently Asked Questions

Why does WordPress say “Upload folder is not writable”?

The most common causes are incorrect file permissions (folders should be 755, files 644), wrong file ownership (the web server user doesn’t own the uploads folder), a hard-coded upload path from a previous host that no longer exists, or the server being out of disk space.

What are the correct file permissions for the WordPress uploads folder?

The wp-content/uploads folder should be set to 755. Files inside it should be 644. The wp-config.php file should be locked down to 600 or 640. Never use 777; it creates a severe security risk.

How do I fix “Unable to create directory uploads/2026/08? Is its parent directory writable by the server?”

This specific error means WordPress can’t create the year/month subdirectory inside uploads. Fix the wp-content/uploads folder permissions to 755, ensure the web server user owns the folder, and verify you haven’t run out of disk space. If you recently migrated, clear the upload_path value in your wp_options database table.

Can a full disk cause the “upload folder not writable” error?

Yes. If your hosting account has reached its disk space limit, WordPress cannot write new files anywhere. The error message looks identical to a permissions issue. Always check your disk usage in your hosting panel before troubleshooting permissions.

What is the FS_METHOD direct setting in WordPress?

Adding define('FS_METHOD', 'direct'); to your wp-config.php file forces WordPress to write files directly using PHP instead of prompting for FTP credentials. This is the standard and recommended method for most modern hosting environments.

Why do I still get the error even after setting permissions to 755?

If permissions are correct but uploads still fail, the issue is likely file ownership. The web server runs as a specific user (like www-data), and if that user doesn’t own the uploads folder, it can’t write to it, even with 755 permissions. Use SSH to check ownership with ls -la and fix it with chown, or contact your host.

Conclusion

The “Upload folder is not writable” error is one of the most common yet most fixable issues in WordPress. In the vast majority of cases, the solution is simply setting the correct file permissions (755 for folders, 644 for files) and ensuring the web server user owns the uploads directory.

But when permissions aren’t the issue, the culprit is usually a hard-coded upload path from a previous host, a full disk, or a server-level restriction like open_basedir or mod_php. By working through the 14 fixes in this guide systematically, you’ll isolate the exact cause and restore your ability to upload media, install plugins, and export data.

Remember: never use 777 permissions as a quick fix. It may solve the immediate problem, but it opens your site to serious security vulnerabilities. Always use the principle of least privilege and give WordPress only the permissions it needs and nothing more.

If you found this guide helpful, share it with fellow WordPress users who are staring at a red “Upload folder is not writable” notification on their dashboard.