![什么原因导致 wordpress 上传时出现文件空错误?](https://linux22.com/image/683239/%E4%BB%80%E4%B9%88%E5%8E%9F%E5%9B%A0%E5%AF%BC%E8%87%B4%20wordpress%20%E4%B8%8A%E4%BC%A0%E6%97%B6%E5%87%BA%E7%8E%B0%E6%96%87%E4%BB%B6%E7%A9%BA%E9%94%99%E8%AF%AF%EF%BC%9F.png)
我似乎无法弄清楚为什么当我尝试在 wordpress 中上传任何内容时会出现以下情况......对于媒体上传和 wordpress 导入 xml:
“抱歉,出现错误。文件为空。请上传更重要的内容。此错误也可能是由于您的 php.ini 中禁用了上传功能,或者 php.ini 中定义的 post_max_size 小于 upload_max_filesize 所致。”
似乎很少有关于如何通过 nginx/php-fpm 在线解决此问题的信息……其中大部分是关于 php.ini 最大配置或 chmod,这……在我的设置中足够post_max_size
大,并且(以及超时)……并且 chmod/chown 似乎适用于使用单独的 php 池。也许有人可以理解这一点?upload_max_filesize
/etc/php5/fpm/php.ini
这是我的设置:
- Cloudflare(已关闭)转为浮动 IP
- Digitalocean 浮动 IP 到 droplet
- Droplet 是 Ubuntu 14.04,带有 nginx,使用 php-fpm,并为每个 wordpress ms 安装创建池(目前为 x4)
- 每个 wpms 安装均使用 Let's encrypt 的 SSL
- 对站点根目录中的所有 wpms 目录进行 Chmod 755
- 对每个站点根目录中的所有 wpms 文件进行 Chmod 644
- wp-config.php 的 Chmod 660
- 将每个 php5-fpm 池用户在其自己的站点根目录下的所有文件/目录上进行 chown,例如:
chown -R example1:example1 /home/example1/*
- Wordpress 是其 nginx conf 根目录下的一个目录。例如
/home/example1/app/wordpress_files_here
- php.ini 已启用上传功能并定义目录(/home/tmp/)
用户既不在 www-data 组也不在 sudo 组中,我知道这样做存在安全风险,但即便如此,我还是暂时尝试将他们添加到 www-data 组,看看 wordpress 上传是否有效……没有成功。我也尝试过 chown example1:www-data 所有权,但没有成功。我还尝试过对上传文件夹使用 chmod 777,但没有成功。
错误日志有以下内容:在 wpms-error.log 中(这对我来说也没有意义)
2016/05/20 01:12:00 [crit] 1584#0: *1251 open() "/home/example1/example1.com-access.log" failed (13: Permission denied) while logging request, client: [my IP address], server: example1.com, request: "POST /wp-admin/admin-ajax.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm-example1.sock", host: "example1.com", referrer: "https://example1.com/wp-admin/admin.php?import=wordpress&step=1&_wpnonce=dad4d82487"
在这些站点的 nginx conf 文件中我有:
access_log /home/example1/$host-access.log;
访问日志在 nginx.conf 中启用(尽管不推荐),但每个站点的访问日志不会写入其站点根目录。
所以...在尝试了在线阅读的所有内容后...我还没有发现根本问题是什么...因为文件权限本身似乎不是问题?..是吗???
以下(将用户名更改为 example1 等之后)是ps aux | grep php
结果:
root 993 0.0 0.2 266688 11396 ? Ss May18 0:10 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)
example1 1003 0.0 1.1 302568 45856 ? S May18 0:32 php-fpm: pool example1
example1 1004 0.0 1.1 304620 47808 ? S May18 0:31 php-fpm: pool example1
example2 1005 0.0 1.1 304360 47648 ? S May18 0:30 php-fpm: pool example2
example2 1007 0.0 1.1 302308 45956 ? S May18 0:30 php-fpm: pool example2
example3 1008 0.0 0.1 268640 7704 ? S May18 0:00 php-fpm: pool example3
example3 1009 0.0 0.1 268640 7744 ? S May18 0:00 php-fpm: pool example3
www-data 1010 0.0 0.1 266680 7560 ? S May18 0:00 php-fpm: pool www
www-data 1011 0.0 0.1 266680 7564 ? S May18 0:00 php-fpm: pool www
example4 1013 0.0 0.9 296016 39704 ? S May18 1:24 php-fpm: pool example4
example4 1014 0.0 1.3 310952 55024 ? S May18 1:23 php-fpm: pool example4
example5 1015 0.0 1.0 297352 40940 ? S May18 0:32 php-fpm: pool example5
example5 1016 0.0 1.1 305104 48232 ? R May18 0:32 php-fpm: pool example5
example4 1105 0.0 0.9 296016 39596 ? S May18 1:20 php-fpm: pool example4
example1 1313 0.0 0.9 296284 39884 ? S May18 0:31 php-fpm: pool example1
example2 1317 0.0 1.1 304364 47628 ? S May18 0:29 php-fpm: pool example2
example5 1332 0.0 0.9 296880 39056 ? S May18 0:29 php-fpm: pool example5
example3 3727 0.0 0.0 11744 932 pts/1 S+ 18:42 0:00 grep --color=auto php
上面的 example3 不是 wpms 站点,它只是一个空的 root atm,并且该用户也属于 sudo 组,并拥有自己的 ssh 登录。我不知道这是否相关。
答案1
在我看来,这听起来像是权限问题,可能与群组有关。我详细介绍了本教程,但要点如下
首先我用来重置权限的脚本
chown -R tim:www-data *
find /var/www/wordpress -type d -exec chmod 755 {} \;
find /var/www/wordpress -type f -exec chmod 644 {} \;
find /var/www/wordpress/wp-content/uploads -type f -exec chmod 664 {} \;
find /var/www/wordpress/wp-content/plugins -type f -exec chmod 664 {} \;
find /var/www/wordpress/wp-content/themes -type f -exec chmod 644 {} \;
chmod 440 /var/www/wordpress/wp-config.php
chmod -R g+s /var/www/wordpress/
以下是我的教程中的要点 - 这些信息来自 wordpress.org 网站,大部分信息都在我的教程中进行了引用
- 将所有者设置为您之前创建的用户,并将所有权组设置为 www-data
- 文件夹默认值为 755,标准
- 文件默认为所有者可写,所有人可读
- 上传文件夹可由用户和 Web 服务器写入,因此用户可以上传媒体
- 插件文件夹可由用户和 Web 服务器写入,因此可以添加插件
- 主题文件夹仅可由所有者修改