WordPress上传图片出错常见原因分析,以Linux/Ubuntu 16.04 LTS 操作系统为例说明。
1. 目录权限问题
如果PHP进程所属用户没有 uploads 目录的写权限,上传就会失败。
可以使用命令 ps -ef | grep fpm 来查看,默认的用户名一般是 www-data
然后使用命令 ls -l 查看图片存储目录的属主和权限
如果目录属主不一致,使用 chown www-data:www-data uploads -R 将uploads的所属用户和所属用户组修改为www-data
如果目录不可写,使用 chmod 0777 uploads -R 将uploads的目录权限修改为可写,
当php-fpm进程和uploads目录所属用户一致,并且开放了写权限,就规避了无法写入的问题。
当然,也不一定要求两者所属用户一致,uploads目录开放了其他用户的写权限,php-fpm进程也是可以写入的。
2. PHP配置参数原因
php 通过两个参数来控制客户端发送数据包的大小,分别是 post_max_size 和 upload_max_filesize
post_max_size 设置了客户端向服务端发送数据的大小,
upload_max_filesize 设置了上传文件的最大值,
具体的大小,可以通过phpinfo()函数来查看,上传的媒体文件大小如果超过了这两个值,就会出现错误,
在phpinfo()函数页面,找到Loaded Configuration File对应的文件,就是当前运行环境的配置文件,
将其值修改为期望的大小,然后重启php-fpm进程就可以了。
service php7.0-fpm restart
3. Nginx/Apache配置参数原因
以Nginx为例,为了保证服务器稳定,也有一个默认的限制发送来的HTTP数据包大小的配置参数 client_max_body_size
通常这个配置并未出现在Nginx的配置文件里面,但是如果遇到Nginx 报 413 Request Entity Too Large Error这样的错误,就说明请求的数据内容超出了限制。
如果要自定义这个参数,只需在 Nginx 的配置文件/etc/nginx/nginx.conf里面的http{….}之间添加一行代码
client_max_body_size 10M;
这样就把上传文件的大小设置为最大10M了
然后执行下面的命令重新载入 Nginx 的配置即可生效
service nginx reload
以上3点是遇到WordPress不能上传图片或者媒体文件时应该注意的地方。