php中 upload操作返回HTTP 413 或者 “too large body”错误的处理方法

By | 2014/06/20

环境: 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


upload_max_filesize = 15M      //单个上传文件的大小限制。 这个值缺省情况下是2M ,对文件上传往往是不够的

post_max_size = 50M          //总的多个文件上传大小的限制

 

2.  修改Nginx的设置。 vim /etc/nginx/nginx.conf


http {

....

client_max_body_size 50m;    #缺省值是1m, 对文件上传操作是不够的。

....

}

需要注意的是:上面是针对该服务器只有一个Website的情况,如果有多个virtual host, 应该把client_max_body_size设置到对应的virtual host上面!

3. 重新启动Nginx和PHP_FPM


/etc/init.d/php-fpm restart

/etc/init.d/nginx restart

 

 

 

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.