WordPress shows “Unable to create directory wp-content/uploads/2026/10. Is its parent directory writable by the server?” when the PHP process handling your site cannot create the requested year/month folder at the path WordPress resolved. Check that exact path first, then fix ownership or write access for the PHP user, and only afterward investigate custom path settings or temporary storage. Avoid setting the site to 777; it can turn an upload problem into a code-execution risk.
Antihost offers managed WordPress hosting with free migration, one-click staging and a 14-day free trial.
What the error actually means
When you upload media, WordPress calculates an uploads directory and normally stores files in a year/month structure such as /wp-content/uploads/2026/10. It then asks PHP to create that directory if it does not exist. The wp_upload_dir() function returns an error value when the path cannot be created.
As an Amazon Associate I earn from qualifying purchases.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
The failure is about the effective PHP or web-server process, not necessarily your SFTP or hosting-panel login. Your file-transfer account may be able to create folders while PHP-FPM, Apache, or another PHP handler is running as a different user with no write permission. A path that looks writable numerically can still fail when its owner or group does not match the worker account.
The printed path is also evidence about configuration. If the message names a custom, relative, symlinked, or moved directory, WordPress may be testing somewhere other than the wp-content/uploads folder you inspected.
Use this diagnostic order
- Copy the complete path from the error. Note the domain’s document root, every parent directory, and the year/month suffix. Do not assume the path is the one shown in a file manager shortcut.
- Check whether the directory exists. In your hosting file manager, SFTP client, or SSH session, locate the named parent and confirm that it is the intended site directory.
- Check every parent directory. PHP needs permission to traverse each parent and write in the uploads directory. A writable-looking final folder cannot compensate for a non-traversable parent.
- Compare owner, group, and mode with the PHP worker. Ask your host which account runs PHP for this site. Compare that account with the directory’s ownership; do not rely on the numeric mode alone.
- Correct ownership first, then apply the least-permissive mode. The durable fix is for the PHP worker and site files to use the hosting layout’s intended owner/group relationship.
- Review WordPress path settings. Check for a stale database
upload_path, anUPLOADSconstant, or a relocatedWP_CONTENT_DIR. - Investigate temporary storage only if the symptoms point there. A temporary-file failure can accompany an upload error, but it is separate from an unwritable uploads parent.
- Retry with a small image. Confirm that WordPress creates the expected year/month folder and that the image is publicly retrievable.
A quick way to narrow the cause
Use the exact wording and path to decide which branch to test first. If the message explicitly names wp-content/uploads/YYYY/MM, inspect that parent and its owner before changing any WordPress constants. If it names an unexpected absolute path, a relative path, or a symlink, investigate configuration and the symlink target before changing permissions. If the upload reaches the server but fails while moving or copying the file, examine temporary storage, disk space, and PHP restrictions instead.
This order prevents two common mistakes: changing a directory that WordPress never uses, and applying a broad permission change when the actual problem is an ownership mismatch. Keep a copy of the original path and settings before editing them so you can reverse a change and explain exactly what was tested.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Fix ownership and permissions safely
Why ownership is usually the real issue
Unix permissions answer who may read, write, or traverse a directory, while ownership and group membership determine which accounts those permission bits apply to. On shared hosting, a site can be owned by your account while PHP runs under a pool, container, or web-server account. In that arrangement, changing a mode from 755 to another value may not solve the mismatch, and making it world-writable exposes the site unnecessarily.
Ask the host to align the PHP/web-server user with the site’s ownership model. This is particularly important when PHP-FPM pools, containers, deployment tools, or multiple sites are isolated from one another.
If you have SSH access
First inspect the complete path, not only the final folder:
namei -l /path/to/site/wp-content/uploads
ls -ld /path/to/site/wp-content /path/to/site/wp-content/uploads
namei -l helps expose a parent directory whose traverse bit blocks PHP even though the final uploads directory looks correct. The ls -ld output shows the owner, group, and mode of the locations you are comparing. You still need the PHP handler’s actual worker account from the host or server configuration; your SSH login is not proof that PHP uses the same identity.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchThe output should show an owner and group that the PHP worker can use, and each parent should allow traversal. If your host has given you the correct site user and group, an ownership correction may look like this (replace the placeholders with the values supplied by the host):
Rank #2
chown -R SITE_USER:SITE_GROUP /path/to/site/wp-content/uploads
Do not run a recursive ownership command with guessed users on managed or shared hosting. A wrong owner can break deployments, updates, or other applications. When in doubt, have support perform the change. A recursive command also changes existing media and subdirectories, so confirm that this scope is intended before running it.
Set only the access the directory needs
After ownership is correct, use the host’s standard directory mode. Many installations use a directory mode that lets the owner and group write while others can only traverse or read, but the correct value depends on the hosting model, umask, and security policy. Change only the uploads directory when possible, and preserve stricter settings elsewhere.
Never leave the site at 777 as a permanent fix. WordPress’s permissions guidance warns that a malicious party who can upload or modify executable content may gain control of the blog, including database credentials. If a host tells you to test 777, revert it immediately after the test and request an ownership-based solution. A successful test with 777 proves only that access bits were involved; it does not identify the proper owner or a safe final mode.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Do not recursively loosen permissions across all of wp-content just because uploads fail. Themes, plugins, and configuration files generally do not need to be writable by the web process. Limiting the writable area reduces the damage an attacker could cause if another vulnerability is exploited.
Verify the path WordPress is using
Normal and custom locations
By default, uploads live under WP_CONTENT_DIR/uploads. The upload_path option can override that location, and the UPLOADS constant is also honored. Defining WP_CONTENT_DIR moves the entire content directory; WP_CONTENT_URL controls the corresponding web URL. A stale database value, a relative path, or a moved directory can make WordPress test a location that is missing or outside the folder you manage.
Read the path in the error literally. A relative path, a symlink target, or an old absolute path deserves investigation before any chmod change. The path shown by WordPress may be valid on the old server but nonexistent on the new one, or it may resolve through a mount that the PHP worker cannot access.
Review settings without adding guesses
- In the database, inspect the WordPress options for
upload_path. Remove an obsolete custom value or replace it with the correct absolute path. - In
wp-config.php, search forUPLOADS,WP_CONTENT_DIR, andWP_CONTENT_URL. Confirm that each value matches the current filesystem and URL layout. - Do not add constants speculatively. A second override can hide the original problem and make future migrations harder.
- After changing a path, test both creation and browser access. An uploads directory must be writable by PHP and web-accessible so browsers can load user content.
Change one path setting at a time, record its previous value, and retry a small upload after each change. If the error path changes, that is useful evidence that the override is being read; it does not by itself prove that the new location has correct ownership or a working web mapping.
Rank #3
When a moved wp-content directory is intentional
Some installations deliberately place content outside the document root or on a separate volume. Keep the move only if the absolute filesystem path, public URL, web-server mapping, and PHP permissions all agree. The advanced constants FS_CHMOD_DIR and FS_CHMOD_FILE can influence permissions WordPress applies, but they are not substitutes for correct ownership and should be changed only when the directory layout requires them.
Moving the content directory has a wider blast radius than correcting an uploads folder. Themes and plugins must still load, existing media URLs must resolve, and deployments must mount the same location consistently. If only media uploads are failing, do not relocate all of wp-content as a first response.
Distinguish uploads permissions from temporary-file failures
PHP first receives an uploaded file in a temporary location. WordPress’s get_temp_dir() checks, in order, PHP’s system temporary directory, the upload_tmp_dir setting, WP_CONTENT_DIR, and finally /tmp, selecting a writable directory. The WP_TEMP_DIR constant can override that selection.
A temporary-directory problem usually produces a message about moving, copying, or handling the uploaded file rather than specifically creating wp-content/uploads/YYYY/MM. If the exact error names the uploads parent, fix that parent first. If a small file reaches the server but fails while being moved, ask the host to check the PHP temporary directory, available space, mount restrictions, and the PHP worker’s access to the selected location.
Recommended Free Tools
Do not set WP_TEMP_DIR as a universal uploads remedy. It changes temporary-file selection and will not make an incorrectly owned uploads directory writable. The selected temporary location also needs appropriate privacy and write access; it should not become a publicly browsable substitute for the uploads directory.
Choose the right fix
| Fix | What it corrects | Scope | Security and durability | Who may need to apply it |
|---|---|---|---|---|
| Align owner/group with the PHP worker | Ownership mismatch that numeric modes cannot solve | Uploads directory or the site tree, depending on the hosting layout | Usually the safest and most durable approach; preserves least privilege | Site owner with server access or the hosting provider |
| Adjust the directory mode | Insufficient write or traverse bits for the already-correct owner/group | Normally only the affected directory | Use the narrowest mode that works; avoid world-writable access | Site owner or host |
Correct upload_path or UPLOADS |
WordPress targeting the wrong location | Changes where uploads are stored | Survives updates when documented, but can break URLs if the mapping is incomplete | Administrator with database and configuration access |
Repair WP_CONTENT_DIR mapping |
Relocated content directory pointing to an invalid path or URL | All of wp-content, not just uploads |
High impact; verify themes, plugins, and URLs after changing it | Administrator, developer, or host |
| Set a valid temporary directory | PHP cannot receive or move the upload through its temporary path | Temporary upload handling | Does not fix uploads-parent permissions; choose a private, writable location | Host or administrator with PHP configuration access |
| Managed hosting support | Server-level ownership, pool, container, or isolation issues | Provider’s PHP and filesystem configuration | Can provide a persistent fix without granting root access; verify the provider’s policy | Hosting provider |
Choose the smallest-scope option that explains the evidence. An owner/group correction is preferable to a broad mode change when the worker identity is wrong. A path correction is preferable when WordPress is targeting an obsolete directory. Temporary-directory changes belong only to failures in the receive or move stage. This distinction improves security and makes the fix more likely to survive updates and deployments.
Test the repair
- Clear any failed upload notification and sign in to WordPress.
- Upload a small JPEG or PNG through Media → Add New.
- Using the same file manager or SSH path from the error, confirm that a directory for the current year and month now exists and contains the file.
- Open the attachment URL in a private browser window. A successful filesystem write with a 403 or 404 response indicates a separate web-server mapping or access-rule problem.
- Repeat once after a cache purge or deployment if your host recreates permissions during releases. The fix should survive the next deployment and routine update.
Test from both sides: filesystem creation confirms PHP can write, while the attachment URL confirms the web server can serve the result. If the folder is created but the URL fails, leave the safe filesystem permissions in place and investigate URL mapping, symlink handling, or web-server rules instead of making the directory more permissive.
Common symptoms and targeted responses
The path is correct, but the error persists
Have the host identify the PHP handler and worker account, then compare it with the uploads owner and group. Check every parent for traversal permission and inspect security controls such as container mounts or filesystem isolation. A file manager may show your account’s access while PHP is confined to a different view of the filesystem.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Fix the driver behind crashes, sound loss and screen glitches3Clear out junk files and repair common Windows errorsThe folder is missing after every deployment
Your deployment process may recreate it with a different owner, group, or mode. Add the directory to the deployment’s ownership and permission policy, or configure the release process to preserve a shared uploads directory. Do not solve a recurring deployment issue by making the folder permanently world-writable.
Only one site on the server is affected
Compare the failing site’s PHP-FPM pool, document root, and ownership with a working site. A per-site pool or container may intentionally use a different account. The provider should grant write access to only the affected site’s uploads directory while keeping other sites isolated.
Uploads worked until the site was moved
Search for old absolute paths in upload_path, UPLOADS, and WP_CONTENT_DIR. Confirm that the new filesystem location is mounted and that its public URL points to the same content. Update one setting at a time and test after each change.
Changing permissions fixes creation but images return 403
Creation and delivery are separate checks. Restore the least-permissive write access that still works, then inspect web-server rules, symlink handling, and the URL mapping for the uploads directory. Do not broaden filesystem permissions to solve an HTTP access-rule problem.
Free tools Windows power users keep installed
One-click scans. No signup required.
The upload fails only for larger files
First compare the error wording with the exact-path error. A failure limited to larger files may occur during temporary storage or movement rather than while creating the month directory. Ask the host to check the PHP temporary location, available space, mount restrictions, and relevant server logs before changing uploads permissions.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.What to send hosting support
Give support enough evidence to check the server side without repeated guesses:
Best Value
- The exact error text and complete path, including the year/month directory.
- The current owner, group, and mode for the uploads directory and each parent.
- The PHP handler type (for example, a PHP-FPM pool or another web-server handler) and the site’s document root.
- Whether
upload_path,UPLOADS,WP_CONTENT_DIR,WP_CONTENT_URL, orWP_TEMP_DIRis customized. - Whether the failure affects all uploads, only large files, or only one site.
- The result of a small-image retry and any related PHP or server log entry.
Readers without root or hosting-panel access can ask a managed WordPress provider to correct PHP ownership, pool isolation, and writable uploads. Confirm the provider’s support scope and backup policy before moving a live site. A provider that manages the PHP user and deployment permissions can be preferable to repeatedly applying temporary chmod changes yourself.
Prevent the error from returning
- Document any non-default content or uploads path in the site’s deployment notes.
- Keep ownership and mode changes in the deployment process so releases do not reset them.
- Grant write access to the smallest directory that needs it; themes, plugins, and configuration files generally should not be writable by the web process unless a specific operation requires it.
- Monitor disk space and inode usage, because a full filesystem can look like a permission failure.
- After migrations, PHP-version changes, or hosting moves, test a media upload before declaring the site ready.
- Keep backups of the database and uploads directory before changing paths or ownership recursively.
- Record the PHP handler or pool arrangement so future support requests identify the correct worker account.
When to stop changing settings yourself
Stop and escalate if you do not know the PHP worker account, the site uses containers or separate pools, a recursive ownership command would affect other applications, or the error returns after a correct owner/mode and path verification. Those conditions require host-level knowledge. Sending the exact path and ownership evidence lets support correct isolation without exposing the entire site to broad write access.
Frequently Asked Questions
Why can I create the folder in SFTP but WordPress cannot?
SFTP and PHP may run as different users. The PHP-FPM, Apache, or other web-server worker must be able to traverse every parent and write to the uploads directory. Ask the host for the worker account and compare it with the directory owner and group.
Should I chmod the uploads directory to 777?
No. It may temporarily hide an ownership problem while allowing anyone who can reach the directory to upload or modify executable content. Revert 777 and request an owner/group correction with the narrowest mode that works.
Where does WordPress normally store uploaded media?
By default it uses WP_CONTENT_DIR/uploads and creates year/month subdirectories. The database upload_path option, the UPLOADS constant, or a custom WP_CONTENT_DIR can redirect that location.
What if the error names an old or relative path?
Inspect upload_path, UPLOADS, and the content-directory constants. Remove an obsolete value or replace it with the correct absolute path, then verify both PHP write access and browser access. Do not add multiple speculative overrides.
Will setting WP_TEMP_DIR fix an uploads-parent error?
Not usually. WP_TEMP_DIR changes where temporary files are selected. It helps only when the failure occurs while PHP receives or moves the upload; it does not repair an incorrectly owned or mislocated uploads directory.
The folder is created, but the image URL returns 403 or 404. Is permissions still the problem?
Creation and delivery are separate. Keep the least-permissive filesystem access that allowed creation, then check the public URL, web-server mapping, symlink handling, and access rules for the uploads directory.
What details should I give my hosting provider?
Send the complete error path, owner/group/mode for the uploads directory and parents, PHP handler or pool type, document root, customized path constants or options, whether only large files or one site fails, and the result of a small-image retry.
The Bottom Line
Start with the complete path in the error. Confirm that the PHP worker—not just your SFTP account—can traverse every parent and write to the resolved uploads directory. Correct ownership, use the narrowest safe mode, and check upload_path, UPLOADS, and WP_CONTENT_DIR before changing temporary-directory settings. Test both file creation and the attachment URL, and escalate with the path and ownership details instead of leaving the site at 777.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

