修改 php.ini 文件

首先我们要修改php相关的一些配置来完成上传文件时大小的限制。

file_uploads = on ;

是否允许通过HTTP上传文件的开关。默认为ON即是开

upload_max_filesize = 8m ;

允许上传文件大小的最大值。默认为2M

post_max_size = 8m ;

通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M

如果 POST 数据尺寸大于 post_max_size $_POST$_FILES superglobals 便会为空.

一般地,在网络正常的情况下,设置好上述三个参数后,上传<=8M的文件是不成问题。但如果要上传>8M的大体积文件,只设置上述三项不一定能行的通。

max_execution_time = 30 ;

每个PHP页面运行的最大时间值(秒),默认30秒。

超过30秒,该脚本就停止执行,这样就会出现无法打开网页的情况

max_input_time = 60 ;

每个PHP页面接收数据所需的最大时间,默认60秒

memory_limit = 8m ;

每个PHP页面所吃掉的最大内存,默认8M

修改 nginx.conf 文件

nginx对上传文件大小是有限制的,解决方法是修补nginx相对应的配置文件。

client_max_body_size     50m; //文件大小限制,默认1m
client_header_timeout    1m; 
client_body_timeout      1m; 
proxy_connect_timeout     60s; 
proxy_read_timeout      1m; 
proxy_send_timeout      1m;

每个参数的意思:

client_max_body_size

限制请求体的大小,若超过所设定的大小,返回413错误。

client_header_timeout

读取请求头的超时时间,若超过所设定的大小,返回408错误。

client_body_timeout

读取请求实体的超时时间,若超过所设定的大小,返回413错误。

proxy_connect_timeout

http请求无法立即被容器(tomcat, netty等)处理,被放在nginx的待处理池中等待被处理。此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒。

proxy_read_timeout

http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,也就是容器返回的response。此参数即为服务器响应时间,默认60秒。

proxy_send_timeout

http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒。

nginx错误:413 Request Entiry Too Large

client_max_body_size 用于设置客户端 Request body(请求体)的大小上限,要上传的文件就在 body 体 中,所以此参数可以间接的看做是对文件上传大小的限制。

nginx 服务器通过请求头的 Content-Length 确定 body 体的大小。超过设置的上限会返回错误码 413 Request Entity Too Large,将此参数设置为 0 可以取消对长度的限制。

Syntax:    client_max_body_size size;
Default:   client_max_body_size 1m;
Context:    http, server, location

client_max_body_size 可以设置在 httpserverlocation 块中,所以我们可以对域名甚至一个请求地址来提高上传包的大小值。

修改/usr/local/nginx/conf/nginx.conf 文件,查找 client_max_body_size 将后面的值设置为你想设置的值。

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
      # 
      location ~ \.php$ { 
        root      /home/www/admin; 
        fastcgi_pass  127.0.0.1:9000; 
        fastcgi_index index.php; 
        fastcgi_param SCRIPT_FILENAME /home/www/admin$fastcgi_script_name; 
        include    fastcgi_params; 
   
        client_max_body_size 35m;    #客户端上传文件大小设为35M 
        client_body_temp_path /home/www/nginx_temp;    #设置临时目录 
      } 

附录:Nginx有一个Upload组件:

upload_limit_rate 158k       # 上传速率

如下:

location /upload {
      upload_pass   /up.php;
      upload_cleanup 400 404 499 500-505;
      #upload_store  /data/app/test.local/upload_tmp;
      upload_store  /tmp;
      upload_store_access user:r;
      client_max_body_size 1024M;
      upload_limit_rate 158k;
      upload_set_form_field "${upload_field_name}_name" $upload_file_name;
      upload_set_form_field "${upload_field_name}_content_type" $upload_content_type;
      upload_set_form_field "${upload_field_name}_path" $upload_tmp_path;
      upload_aggregate_form_field "${upload_field_name}_md5" $upload_file_md5;
      upload_aggregate_form_field "${upload_field_name}_size" $upload_file_size;
      upload_pass_form_field "^.*$";
      #upload_pass_form_field "^pid$|^tags$|^categoryid$|^title$|^userid$|^user_id$|^is_original$|^upload_file_name$|^upload_file_content_type$|^upload_file_path$|^upload_file_md5$|^upload_file_size$";
    }