环境: CentOS Linux + Nginx + Php5
在PHP中,经常会遇到文件上传的问题, 由于这是一个对安全性要求较高的操作,因此首先你需要确保 上传目录的权限的设置是正确的 (应该给予Web进程用户,比如Apache, Nginx的读写权利,但其他用户应该无法访问), 另外要对上传的文件类型进行判断和筛选 (一般原则是可以先通过Mime type来筛选,然后检查扩展名).
但有时候即使权限和文件类型都匹配的情况下,仍然会遇到 HTTP 413 错误 ( Request Entity Too Large ). 如果你检查nginx的error log, 会发现 “client intended to send too large body“ 的错误log。 这种情况下,如何解决呢?
首先需要明确的是:该错误是由于你上传的文件大小 超出了PHP / Web服务器 允许的限定导致的。缺省情况下,对上传文件大小的限制比较严格,而目前很多高清图片都会超出缺省的限定值。 解决方法如下:
1. 修改 php.ini 文件 , vim /etc/php.ini
[code]
upload_max_filesize = 15M //单个上传文件的大小限制。 这个值缺省情况下是2M ,对文件上传往往是不够的
post_max_size = 50M //总的多个文件上传大小的限制
[/code]
2. 修改Nginx的设置。 vim /etc/nginx/nginx.conf
[code]
http {
….
client_max_body_size 50m; #缺省值是1m, 对文件上传操作是不够的。
….
}
[/code]
需要注意的是:上面是针对该服务器只有一个Website的情况,如果有多个virtual host, 应该把client_max_body_size设置到对应的virtual host上面!
3. 重新启动Nginx和PHP_FPM
[code]
/etc/init.d/php-fpm restart
/etc/init.d/nginx restart
[/code]