宝哥软件园

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

编辑:宝哥软件园 来源:互联网 时间:2021-08-29

一、前言

在网站开发中,经常需要上传文件,有些文件因为太大而直接上传,上传过程中往往耗时太长,占用大量的带宽资源,所以需要分片上传。

片段上传主要是指前端将一个较大的文件分割成几个相等的片段,识别当前片段是哪一个片段,总共有多少个片段,当所有片段上传成功后,在后台合成文件。

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

切片的时候,每个切片应该分成什么大小?当上传“413请求实体过大”片段时,不会严格按照片段的序号上传。如何判断所有片段上传成功?合成文件时如何判断才能保证合成完整的文件没有错误?当同时上传多个切片时,当没有读写文件的排他锁时,会导致合成错误。第三,解决问题

当413出现时,nginx.conf和php.ini被修改

(1)在1)nginx中添加client_max_body_size和client_body_buffer_size

(2)将post_max_size和upload_max_filesize添加到2)php.ini

重启nginx和php-fpm

代码逻辑梳理与共享

(1)首先,获取当前切片是哪个切片,总共有多少个切片

(2)创建一个文件夹来存储所有切片和合成文件

(3)变量$done最初为true,用于判断是否上传了所有片段。保存每个片段时,用片段序号作为文件名,然后判断是否所有片段文件都存在。

(4)当$done===true时,表示上传所有片段,合成文件。

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

在读取每个片段之前判断当前片段是否存在,是为了防止多个进程执行合成文件代码块时写入和删除一个片段,最终合成文件不完整。此时需要删除合成的不完整文件,退出退出当前进程。

最好为每个切片设置一个排他锁float ($ in,lock _ ex),以确保其他进程在读写切片时不会操作该切片。最后,删除片段解除链接,释放排他锁。

摘要

以上就是边肖介绍的分段上传PHP大文件的实现方法。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你的!

更多资讯
游戏推荐
更多+