当我将文件上传到我的 WordPress 网站时,出现以下错误:
Unable to create directory wp-content/uploads/2017/03. Is its parent directory writable by the server?
我在 Linux 机器上的 Apache 2.2.2 服务器上运行 WordPress。wp-content 文件夹具有 775 个权限,我/uploads
在其中创建了一个也具有 775 个权限的文件夹。这两个文件夹以及整个 WordPress 文件目录的用户和组都是www-data
。
我正在运行 WordPress 4.7.3。
如果这值得注意的话,在安装时,我的upload_path
变量没有设置。此后,我将其设置为wp-content/uploads
并手动创建了uploads
具有 775 权限的目录。
安装过程是使用安装wget wordpress.org/latest.tar.gz
并从那里安装。
这可能与此有关吗?
在网上找不到任何涉及更改权限或将 php 设置为不安全模式的解决方案。
干杯!
编辑:
其他不属于 www-data 且不由 www-data 分组的文件和目录是否与此有关?ls -l
会导致这样的情况:
-rw-r--r-- 1 nobody nogroup 418 Sep 24 2013 index.php -rw-r--r-- 1 nobody nogroup 19935 Jan 2 12:51 license.txt -rw-r--r-- 1 nobody nogroup 7433 Jan 11 11:46 readme.html -rw-r--r-- 1 nobody nogroup 5447 Sep 27 16:36 wp-activate.php drwxr-xr-x 9 nobody nogroup 4096 Mar 6 10:00 wp-admin -rw-r--r-- 1 nobody nogroup 364 Dec 19 2015 wp-blog-header.php -rw-r--r-- 1 nobody nogroup 1627 Aug 29 2016 wp-comments-post.php -rw-r--r-- 1 root root 3045 Mar 22 21:47 wp-config.php -rw-r--r-- 1 nobody nogroup 2853 Dec 16 2015 wp-config-sample.php drwxrwxr-x 5 www-data www-data 4096 Mar 22 23:09 wp-content -rw-r--r-- 1 nobody nogroup 3286 May 24 2015 wp-cron.php drwxr-xr-x 18 nobody nogroup 12288 Mar 6 10:00 wp-includes -rw-r--r-- 1 nobody nogroup 2422 Nov 20 20:46 wp-links-opml.php -rw-r--r-- 1 nobody nogroup 3301 Oct 24 22:15 wp-load.php -rw-r--r-- 1 nobody nogroup 33939 Nov 20 20:46 wp-login.php -rw-r--r-- 1 nobody nogroup 8048 Jan 10 23:15 wp-mail.php -rw-r--r-- 1 nobody nogroup 16250 Nov 28 23:39 wp-settings.php -rw-r--r-- 1 nobody nogroup 29896 Oct 18 23:47 wp-signup.php -rw-r--r-- 1 nobody nogroup 4513 Oct 14 14:39 wp-trackback.php -rw-r--r-- 1 nobody nogroup 3065 Aug 31 2016 xmlrpc.php
答案1
真正的问题很可能是权限,并且可能您没有根据需要完全更改它们,或者 Web 服务器以与您预期不同的用户身份运行它。
我将像这样使用 sudo 进行测试(将 /var/www 替换为相关路径):
sudo -u www-data mkdir -p /var/www/wp-content/uploads/2017/03
如果可行,我会检查“dmesg”中是否存在 AppArmor 故障,尽管我不认为 AppArmor 默认会从内存中阻止 apache2/php。
如果这不起作用,我会将其用作一个简单的测试来探索和修复权限以使其正常工作。您可以先检查所有目录级别的权限
ls -lad /var/www /var/www/wp-content /var/www/wp-content/uploads /var/www/wp-content/uploads/2017 /var/www/wp-content/uploads/2017/03
答案2
嗯,我确实感觉自己像一个邓达-米夫林。
使用 检查了正在运行的进程ps aux | egrep '(apache|httpd)'
,发现所有进程都在 下运行http-web
。我确认ls -l
我的所有 WordPress 文件夹中的权限都属于某个www-data
用户和组。
我使用 (里面chown -R http-web:http-web /var/www/html
有一个额外的文件夹)改变了这一切。html
www
资料来源: