The folders
PHP, running as your web server's user, must be able to write to these. Usually that means permission 755, with the folder owned by the web server's user.
| Folder | What is written there |
|---|---|
| The site folder itself | The .env settings file on a store without a private folder, and the short-lived file the licence server checks when you reinstall on the same domain. |
plugins/ | Add-ons you install and update. |
assets/themes/ | Themes you install and update. |
images/ | Logos and uploaded images. |
storage/ | The licence file, and the work area of core updates (storage/kernel-update/). |
logs/ | The PHP error log, on a store without a private folder. |
| The private folder | Settings, licence, backups and logs, once they move outside the site. The folder above your site must be writable for it to be made. |
| PHP's temporary folder | Downloads are put together here before they're unpacked. |
For core updates
A core update replaces the store's own files, so PHP must also be able to write to the site folder and these folders in it: admin, includes, assets, components, vendor, install, database, language, api, ajax and cron. Appearance Software update checks this first and lists any it can't write.
Where a missing permission shows up
| Where | What you see |
|---|---|
| Setup wizard, step 1 | "The … folder can be written" fails, with the full path to fix. |
| Installing or updating an add-on | "Install directory is not writable." |
| Software update | "Site files are writable by PHP" in red, naming the folders. |
| Uploading an image | Security Logs Upload Logs gives the reason; images/ must be writable. |
| Cron Logs, changing the key | "Could not save the key: the .env file is not writable." |
| Server check | The private folder shows "Not writable". |
| Server errors | "The error log cannot be read": give the web server's user read and write access to the file it names. |
After copying the site to another server
Copies often change who owns the files. If the store then says its .env file "is on the server but PHP is not allowed to read it", give the PHP user read access to the file it names. See Move your store to a new server or domain.
Write access for the web server's user is enough. The store creates its private folder with tight permissions (0750) on purpose; leave them as they are.
Something wrong or unclear on this page? Tell us at [email protected], or see how to get help.