Hosting WordPress Spanish version

Support article

WordPress Image Upload Error: Permissions

Fix WordPress image upload errors by checking permissions, ownership, the uploads folder, PHP limits, space, and media processing.

Published: 30/06/2026 Updated: 12/07/2026

What happens when WordPress can’t upload images

When uploading an image to the media library, you may see messages like “Unable to create directory,” “The uploaded file could not be moved,” “Missing a temporary folder,” or “The server can’t process the image.”

They don’t all mean the same thing. wp-content/uploads permissions are a common cause, but file ownership, available space, PHP limits, image dimensions, unsupported formats, or security filters can also play a role. Before changing permissions, pin down the exact message and back up.

Step 1: check whether the problem affects every file

Try a small JPG or PNG with a simple name and no special characters. If only one file fails, check its format, size, dimensions, or possible corruption. If everything fails, check permissions, space, the temp folder, and PHP configuration.

Step 2: check the upload path

WordPress normally uses wp-content/uploads/, organizing files by year and month (wp-content/uploads/2026/07/). Check Settings > Media — on modern installs a custom path usually isn’t needed. An old or absolute path can cause errors after a migration (see migrating WordPress to another host).

Step 3: check that the folder exists

From the file manager or FTP, open wp-content and check that uploads exists. If it doesn’t, create it with the exact name and try again. WordPress also needs to be able to create year/month subfolders when that option is on.

Step 4: check permissions

On many Linux servers, a common setup is 755 or 750 for directories and 644 or 640 for files. For wp-content/uploads, start by checking 755.

Don’t use 777. It allows any system user to write, which is a security risk, and it doesn’t fix incorrect ownership anyway.

From the panel, select the uploads folder, open Permissions or CHMOD, and set the right value. Over SSH:

find wp-content/uploads -type d -exec chmod 755 {} \;
find wp-content/uploads -type f -exec chmod 644 {} \;

Step 5: check file ownership

Even if uploads has 755, WordPress won’t be able to write if the folder belongs to a different user and PHP runs as the account’s user. On shared hosting, files usually belong to the account’s own user, not root or an unrelated one.

On your own server, check ls -ld wp-content/uploads and its contents with ls -la. Fixing ownership may require chown, but don’t run commands without knowing the correct user and group. This commonly happens after uploading or extracting files as root.

Step 6: check space and quota

WordPress can’t save files if the account hit its quota, the disk is full, the temp partition has no space, or a file/inode limit was reached. Check disk usage, file count, caches, logs, and accumulated backups.

Step 7: check PHP limits

The main settings are upload_max_filesize, post_max_size, memory_limit, max_execution_time, and max_input_time. post_max_size must be equal to or greater than upload_max_filesize. Check these under Tools > Site Health > Info > Server or in the panel’s PHP configuration.

Step 8: check PHP’s temp folder

“Missing a temporary folder” usually points to an issue with upload_tmp_dir or the server’s temp folder. On shared hosting, contact support. On your own server, check that upload_tmp_dir points to an existing folder with write permission and space.

Step 9: reduce dimensions and size

Processing a large image can exhaust memory even if the file doesn’t exceed the upload limit (see memory exhausted in WordPress). Resize to the maximum size you’ll actually use, compress the image, and avoid images with tens of megapixels unless they’re needed. WordPress generates several thumbnails, and each one needs memory.

Step 10: check PHP’s image extensions

WordPress uses libraries like GD or Imagick to process images. Check the media handling section under Site Health. On shared hosting, ask support to check GD or Imagick; on a VPS, install the extension compatible with the active PHP version.

Step 11: rule out plugin and theme conflicts

Security, optimization, external storage, or CDN plugins can block or intercept uploads. Deactivate them temporarily and test again (see how to deactivate WordPress plugins without admin access if you can’t reach the panel). A theme can also alter the upload process — try a default theme if the cause isn’t showing up.

Step 12: check the MIME type, extension, and debug log

WordPress restricts allowed file types for security; check that the extension matches the actual content and that the format is allowed. If the message is still unclear, temporarily turn on debug logging (see how to turn on debug mode) and check wp-content/debug.log.

A web application firewall or ModSecurity can also block files by name, content, size, or rule; if the log shows a 403, give support the exact time, the URL, and the file’s name and size.

Common issues

”Unable to create directory”

Check existence, permissions, ownership, upload path, quota, and the year/month folder.

”The uploaded file could not be moved”

PHP received the file, but WordPress can’t write to the destination. Check ownership and permissions.

Only WebP, AVIF, or SVG images fail

Confirm compatibility across WordPress, PHP, the graphics library, the browser, and plugins. SVG requires extra security measures.

It works over FTP but not from WordPress

The FTP user can write, but the PHP process can’t. Check ownership, group, and how PHP is run.

Frequently asked questions

What permissions should uploads have?

On many hosts, 755 for directories and 644 for files. Ownership and server configuration matter just as much.

Can I use 777 to test?

It’s not recommended. It can expose the site and doesn’t fix incorrect ownership.

Why is WordPress’s limit lower than PHP’s?

There may be an additional limit on Multisite, in the web server, in a proxy, or in a plugin.

Can a small image exhaust memory?

Yes, if its dimensions are huge or the file is corrupted. Processing uses uncompressed memory.

Conclusion

When WordPress can’t upload images, first check the exact message, the wp-content/uploads folder, permissions, ownership, and available space. Then check PHP limits, dimensions, graphics libraries, and security or optimization plugins.

Don’t use 777 permissions — if file ownership is wrong, ask for a technical review to fix it safely.