菜鸡源码,专注精品下载!
当前位置:首页 > 建站教程 > 建站知识

如何解决修改PHP配置后上传大文件仍然失败的问题?

发布时间:2024-01-05  栏目:建站知识   浏览:   分类:php教程 php配置 大文件上传

如果你修改了PHP配置但是上传大文件依旧失败,你可以尝试以下方法: 1. 检查你的服务器磁盘空间是否充足。如果磁盘空间不足,你需要清理一些不必要的文件来释放空间。 2. 检查你的PHP.ini文件中的`upload_max_filesize`和`post_max_size`设置是否正确。这两个参数分别控制了上传文件的最大大小和POST请求的最大数据量。 3. 如果以上两个方法都无法解决问题,你可以尝试重启你的服务器或者联系你的服务器提供商寻求帮助。

问题:

修改了PHPupload_max_filesize、post_max_size、memory_limit、max_execute_time等等配置,但是上传大文件依旧失败怎么办?

当然不能简单粗暴的将这几个参数调大,否则服务器会出现内存资源吃光是早晚的的问题。

JS方法

1.监听上传按钮的onchange事件

2.获取文件的FILE对象

3.把文件的FILE对象进行切割,并且附加到FORMDATA对象中

4.把FORMDATA对象通过AJAX发送到服务器

5.重复3、4步骤,直到文件发送完。

PHP方法

1.建立上传文件夹

2.把文件从上传临时目录移动到上传文件夹

//移动文件privatefunctionmoveFile(){$this->touchDir();$filename=$this->filepath.'/'.$this->fileName.'__'.$this->blobNum;move_uploaded_file($this->tmpPath,$filename);}

3.所有的文件块上传完成后,进行文件合成

privatefunctionfileMerge(){if($this->blobNum==$this->totalBlobNum){$blob='';for($i=1;$i<=$this->totalBlobNum;$i++){$blob.=file_get_contents($this->filepath.'/'.$this->fileName.'__'.$i);}file_put_contents($this->filepath.'/'.$this->fileName,$blob);$this->deleteFileBlob();}}

4.删除文件夹

//删除文件块privatefunctiondeleteFileBlob(){for($i=1;$i<=$this->totalBlobNum;$i++){@unlink($this->filepath.'/'.$this->fileName.'__'.$i);}}

5.返回上传后的文件路径

//API返回数据publicfunctionapiReturn(){if($this->blobNum==$this->totalBlobNum){if(file_exists($this->filepath.'/'.$this->fileName)){$data['code']=2;$data['msg']='success';$data['file_path']='http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['DOCUMENT_URI']).str_replace('.','',$this->filepath).'/'.$this->fileName;}}else{if(file_exists($this->filepath.'/'.$this->fileName.'__'.$this->blobNum)){$data['code']=1;$data['msg']='waitingforall';$data['file_path']='';}}header('Content-type:application/json');echojson_encode($data);}

upload.html

<!doctypehtml><html><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0"><metahttp-equiv="X-UA-Compatible"content="ie=edge"><title>Document</title><style>#progress{width:300px;height:20px;background-color:#f7f7f7;box-shadow:inset01px2pxrgba(0,0,0,0.1);border-radius:4px;background-image:linear-gradient(tobottom,#f5f5f5,#f9f9f9);}#finish{background-color:#149bdf;background-image:linear-gradient(45deg,rgba(255,255,255,0.15)25%,transparent25%,transparent50%,rgba(255,255,255,0.15)50%,rgba(255,255,255,0.15)75%,transparent75%,transparent);background-size:40px40px;height:100%;}form{margin-top:50px;}</style></head><body><divid="progress"><divid="finish"style="width:0%;"progress="0"></div></div><formaction="./upload.php"><inputtype="file"name="file"id="file"><inputtype="button"value="停止"id="stop"></form><script>varfileForm=document.getElementById("file");varstopBtn=document.getElementById('stop');varupload=newUpload();fileForm.onchange=function(){upload.addFileAndSend(this);}stopBtn.onclick=function(){this.value="停止中";upload.stop();this.value="已停止";}functionUpload(){varxhr=newXMLHttpRequest();varform_data=newFormData();//constLENGTH=1024*1024;constLENGTH=10*10;varstart=0;varend=start+LENGTH;varblob;varblob_num=1;varis_stop=0//对外方法,传入文件对象this.addFileAndSend=function(that){varfile=that.files[0];blob=cutFile(file);sendFile(blob,file);blob_num+=1;}//停止文件上传this.stop=function(){xhr.abort();is_stop=1;}//切割文件functioncutFile(file){varfile_blob=file.slice(start,end);start=end;end=start+LENGTH;returnfile_blob;};//发送文件functionsendFile(blob,file){vartotal_blob_num=Math.ceil(file.size/LENGTH);form_data.append('file',blob);form_data.append('blob_num',blob_num);form_data.append('total_blob_num',total_blob_num);form_data.append('file_name',file.name);xhr.open('POST','./upload.php',false);xhr.onreadystatechange=function(){varprogress;varprogressObj=document.getElementById('finish');if(total_blob_num==1){progress='100%';}else{progress=Math.min(100,(blob_num/total_blob_num)*100)+'%';}progressObj.style.width=progress;vart=setTimeout(function(){if(start<file.size&&is_stop===0){blob=cutFile(file);sendFile(blob,file);blob_num+=1;}else{setTimeout(t);}},1000);}xhr.send(form_data);}}</script></body></html>

upload.php

<?phpclassUpload{private$filepath='./upload';//上传目录private$tmpPath;//PHP文件临时目录private$blobNum;//第几个文件块private$totalBlobNum;//文件块总数private$fileName;//文件名publicfunction__construct($tmpPath,$blobNum,$totalBlobNum,$fileName){$this->tmpPath=$tmpPath;$this->blobNum=$blobNum;$this->totalBlobNum=$totalBlobNum;$this->fileName=$fileName;$this->moveFile();$this->fileMerge();}//判断是否是最后一块,如果是则进行文件合成并且删除文件块privatefunctionfileMerge(){if($this->blobNum==$this->totalBlobNum){$blob='';for($i=1;$i<=$this->totalBlobNum;$i++){$blob.=file_get_contents($this->filepath.'/'.$this->fileName.'__'.$i);}file_put_contents($this->filepath.'/'.$this->fileName,$blob);$this->deleteFileBlob();}}//删除文件块privatefunctiondeleteFileBlob(){for($i=1;$i<=$this->totalBlobNum;$i++){@unlink($this->filepath.'/'.$this->fileName.'__'.$i);}}//移动文件privatefunctionmoveFile(){$this->touchDir();$filename=$this->filepath.'/'.$this->fileName.'__'.$this->blobNum;move_uploaded_file($this->tmpPath,$filename);}//API返回数据publicfunctionapiReturn(){if($this->blobNum==$this->totalBlobNum){if(file_exists($this->filepath.'/'.$this->fileName)){$data['code']=2;$data['msg']='success';$data['file_path']='http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['DOCUMENT_URI']).str_replace('.','',$this->filepath).'/'.$this->fileName;}}else{if(file_exists($this->filepath.'/'.$this->fileName.'__'.$this->blobNum)){$data['code']=1;$data['msg']='waitingforall';$data['file_path']='';}}header('Content-type:application/json');echojson_encode($data);}//建立上传文件夹privatefunctiontouchDir(){if(!file_exists($this->filepath)){returnmkdir($this->filepath);}}}//实例化并获取系统变量传参$upload=newUpload($_FILES['file']['tmp_name'],$_POST['blob_num'],$_POST['total_blob_num'],$_POST['file_name']);//调用方法,返回结果$upload->apiReturn();
评论
建站知识
建站知识
使用技巧
调试安装
运营推广