Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  php  >  正文 php 无法上传大文件完美解决方案

php 无法上传大文件完美解决方案

发布时间:2018-09-09   编辑:www.jquerycn.cn
jquery中文网为您提供php 无法上传大文件完美解决方案等资源,欢迎您收藏本站,我们将为您提供最新的php 无法上传大文件完美解决方案资源
如果你是碰到无法上传文件那么可能是目录权限地设置问题,但能上小文件无法上传大文件,这个就是php.ini或环境的配置问题,下文来给各位整理此类问题的解决办法。

php.ini无法上传大文件完美解决办法

1、打开php.ini(打开方式就不用说了,百度一大堆)

2、查找post_max_size
表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的
默认为8M,设置为自己需要的值,此参数建议要设置比upload_max_filesize大一些

3、查找File Uploads
是否允许通过http上传文件的开关,确认file_uploads = on

4、查找upload_tmp_dir
文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
如果系统报错提示有“XXX临时目录XXX”的话,这个目录就需要你来设置一个有效目录,没报错就不用管

5、查找upload_max_filesize
允许上传文件大小的最大值,默认为2M,设置为自己需要的值此参数建议不要超过post_max_size值,因为它受控于post_max_size值(就算upload_max_filesize设置了1G,而post_max_size只设置了2M时,大于2M的文件照样传不上去,因为它受控于post_max_size值)

6、如果要上传大于8M的文件,还需要对下面的参数也进行设置:

查找max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 8M ;每个PHP页面所需要的最大内存,默认8M

nginx法上传大文件完美解决办法


1.client_body_buffer_size 尽量设置的大点,这是基于速度的考虑,如果因为设置的过小,导致上传的文件老要写磁盘,那速度就太慢了。
2.client_body_temp_path 路径要有可写权限,这个是明显的错误了。改正了就好
3.client_max_body_size 设置上传文件的最大值,这个是基于安全的考虑,我们认为正常用户不会或者基本不会上传太大的文件。
可以设置为client_max_body_size 100m;  或者按照自己的业务来设置这个值。

例子

nginx的配置。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy1165')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy1165>

 cd /export/servers/nginx/conf/nginx.conf,在这个配置文件里面的server段里面的

location / {

    root   html;

    index  index.html index.htm;

   client_max_body_size    1000m;

  }

 加上了client_max_body_size    字段,怎么重启都不行。后来在总配置文件里面发现了分配置文件:

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy6181')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy6181>

sendfileon;
    #tcp_nopush     on;
   
    #keepalive_timeout  0;
    keepalive_timeout  65;
     
    #gzip  on;
    include domains/*;
    #include domains/chat.local;
    #include domains/chat.erp.com;
    #include domains/support.chat.com;
    #include douains/chat.com;
   
    server {
listen       80;
server_name  localhost;

于是找到了分配置文件,在分配置文件里面进行修改。分配置文件配置如下:

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy1525')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy1525>server
{
   listen   80;
   server_name  chat.erp.360buy.com;
#  access_log    /export/servers/nginx/logs/chat.erp.360buy.com;
   location / {
   proxy_pass     http://tomcat;
client_max_body_size    1000m;
     }
}

用/export/servers/nginx/sbin/nginx -s reload重启下,上传文件的大小受限的问题就解决了。
分享下我的解决过程,希望对大家有帮助。

如果还是无法解决我们需要看看是不是php表单设置问题

这段代码分为两个文件,一个为upload.html,一个是upload.php

upload.html

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy9206')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy9206><form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="max_file_size" value="100000">
<input name="userfile" type="file">  
<input type="submit" value="上传文件">
</form>

其中,

请注意<form enctype="multipart/form-data"……>这是一个标签,我们要实现文件的上传,必须指定为multipart/form-data,否则服务器将不知道要干什么。
值得注意的是文件upload.html中表单选项 MAX_FILE_SIZE 的隐藏值域,通过设置其Value(值)可以限制上载文件的大小。
MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单的绕过。因此不要把对浏览器的限制寄希望于该值。实际上,PHP 设置中的上传文件最大值,是不会失效的。但是最好还是在表单中加上 MAX_FILE_SIZE,因为它可以避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。
upload.php

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy2353')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy2353>$f=&$HTTP_POST_FILES['Myfile'];
$dest_dir=’uploads’;//设定上传目录
$dest=$dest_dir.’/’.date("ymd")."_".$f['name'];//设置文件名为日期加上文件名避免重复
$r=move_uploaded_file($f['tmp_name'],$dest);
chmod($dest, 0755);//设定上传的文件的属性
或者
<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>

以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称为 userfile(名称可随意命名)

您可能感兴趣的文章:
php无法上传大于8M文件解决方法
php 无法上传大文件问题完美解决方法
php文件上传代码大全(实例分享)
php 无法上传大文件完美解决方案
PHP上传文件过大$_FILES为空的解决方法
php 完美解决无法上传大文件方法
PHP上传文件大小限制二种解决方法
Windows 7 无法注册flash player的activex控件
php 文件上传实例剖析
phpmyadmin只能导入2048kb .sql文件解决办法

[关闭]