首页 > 编程语言 >PHP大文件分片上传的实现方法

PHP大文件分片上传的实现方法

时间:2023-11-10 17:56:37浏览次数:38  
标签:文件 几片 合成 分片 PHP 上传 size

一、前言

在网站开发中,经常会有上传文件的需求,有的文件size太大直接上传,经常会导致上传过程中耗时太久,大量占用带宽资源,因此有了分片上传。

分片上传主要是前端将一个较大的文件分成等分的几片,标识当前分片是第几片和总共几片,待所有的分片均上传成功的时候,在后台进行合成文件即可。

二、开发过程中遇到的问题

  1. 分片的时候每片该分多大size?太大会出现“413 request entity too large”
  2. 分片上传的时候并不是严格按照分片的序号顺序上传,如何判断所有的分片均上传成功?
  3. 合成文件的时候如何判断保证合成一个完整的文件而不出错?多个分片同时上传的时候,读写文件没有独占锁的时候会导致合成错误。

三、问题解决

当出现413的时候,修改了 nginx.conf 和php.ini

(1)nginx中添加client_max_body_size和client_body_buffer_size

(2)php.ini添加post_max_size 和 upload_max_filesize

重启nginx和php-fpm

代码逻辑梳理和分享

    (1)先获取当前分片是第几片以及总共几片

    (2)创建一个文件夹用来存储所有的分片以及合成的文件

   (3)变量$done初始为true,用来判断是否所有的分片都上传完成,每个分片保存的时候使用分片序号作为文件名,然后判断所有的分片文件是否存在

    (4)当$done===true的时候,代表所有分片上传完成,合成文件。     

       $target变量代表合成后的文件名,file_exists判断是否已经合成成功,然后追加方式创建打开文件,循环将每个分片内容写入一个文件中。

       在读取每个分片之前先判断当前分片是否存在,是为了防止多个进程执行合成文件代码块的时候导致某个分片已经写入删除,最后导致合成的文件是不完整的,此时需要删除合成的不完整的文件并退出exit当前进程。

       其中每个分片最好设置独占锁,flock($in, LOCK_EX),用来保证读写分片的时候其他进程不会操作该分片。最后删除分片unlink以及释放独占锁。

总结

以上所述是小编给大家介绍的PHP大文件分片上传的实现方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

 

参考文章:http://blog.ncmem.com/wordpress/2023/11/10/php%e5%a4%a7%e6%96%87%e4%bb%b6%e5%88%86%e7%89%87%e4%b8%8a%e4%bc%a0%e7%9a%84%e5%ae%9e%e7%8e%b0%e6%96%b9%e6%b3%95/

欢迎入群一起讨论

 

 

标签:文件,几片,合成,分片,PHP,上传,size
From: https://www.cnblogs.com/songsu/p/17824703.html

相关文章

  • Docker将容器制作成镜像并上传docker hub仓库
    前言在使用docker时候常常需要把自己配置好环境的容器制作成镜像并上传到dockerhub以便之后拉取。本篇文章就是介绍如何将docker容器制作成镜像并上传到dockerhub。背景很多dockerhub上拉下来的镜像,通过修改配置文件等操作,定制成了适合自己的镜像,以后用自己的镜像就可以,因此需要......
  • 文件上传-code
       1.导入上传文件gav坐标     <!--https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload-->  <dependency>  <groupId>commons-fileupload</groupId>  <artifactId>commons-fileupload</artifactId>  <v......
  • php批量上传大文件,php实现批量上传图片的技巧
    我们在很多时候并不是上传一张图片就可以了需要同时上传N张图片,这个时候该怎么办了?我这里以前写了个例程大家看看,或许可以启发思路!php提交图片页面程序部分,可以实现动态显示图片的数量:enctype=”multipart/form-data”method=”post”name=”Form1″id=”Form1″>functiont......
  • PHP编写采集药品官方数据的程序
    在PHP中编写爬虫程序,首先我们需要引入一些必要的库,如curl和file_get_contents。然后,我们需要设置爬虫ip信息,以便我们可以从指定的爬虫ip服务器上获取数据。//引入必要的库require_once'curl.php';//设置爬虫ip信息$proxy_host='duoip';$proxy_port=8000;//创建......
  • php针对某个网址实现302跳转如何实现?
    在PHP中实现一个HTTP302重定向非常简单。你需要编写一个简单的PHP脚本来设置HTTP头部,指示浏览器重定向到一个新的URL。以下是一个基本的步骤,展示了如何做到这一点:创建一个PHP文件:首先,你需要在你的web服务器上创建一个新的PHP文件。这个文件将包含重定向的代码。编写重定向代码......
  • linux内核 快速分片,技术|Linux slabtop命令——显示内核片缓存信息
    Linux内核需要为临时对象如任务或者设备结构和节点分配内存,缓存分配器管理着这些类型对象的缓存。现代Linux内核部署了该缓存分配器以持有缓存,称之为片。不同类型的片缓存由片分配器维护。本文集中讨论slabtop命令,该命令显示了实时内核片缓存信息。1.命令用法:该命令用起来很简单......
  • elementui 自定义上传接口上传完图片之后无法再进行第二次上传,踩坑解决
    1,上传功能<el-upload action="" ref='upload' :http-request="handleFileUpload" :limit="1" :show-file-list="false"> <iclass="el-icon-upload2"></i></el-upload>2,在上传后......
  • python 递归上传文件到阿里云oss
    python递归上传文件到阿里云ossimportosimportoss2importjson#阿里云OSS访问信息access_key_id='xxxxxxxxx'access_key_secret='xxxxxxxxxxxxx'endpoint='xxxxxxxxxxxxx'bucket_name='bucketName'#本地目录路径local_directory......
  • 文件上传漏洞总结
    文件上传漏洞总结0x00原理文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。“文件上传”本身没有问题,有问题的是文件上传后,......
  • Redis分片集群
    搭建分片集群主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:●海量数据存储问题●高并发写的问题使用分片集群可以解决.上述问题,分片集群特征:●集群中有多个master,每个master保存不同数据●每个master都可以有多个slave节点●master之间通过ping监测彼......