PHP大文件分片上傳的實現方法

1、前言php

在網站開發中,常常會有上傳文件的需求,有的文件size太大直接上傳,常常會致使上傳過程當中耗時過久,大量佔用帶寬資源,所以有了分片上傳。html

分片上傳主要是前端將一個較大的文件分紅等分的幾片,標識當前分片是第幾片和總共幾片,待全部的分片均上傳成功的時候,在後臺進行合成文件便可。前端

2、開發過程當中遇到的問題nginx

  1. 分片的時候每片該分多大size?太大會出現「413 request entity too large」
  2. 分片上傳的時候並非嚴格按照分片的序號順序上傳,如何判斷全部的分片均上傳成功?
  3. 合成文件的時候如何判斷保證合成一個完整的文件而不出錯?多個分片同時上傳的時候,讀寫文件沒有獨佔鎖的時候會致使合成錯誤。

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以及釋放獨佔鎖。

 

 
傳智播客第34期php培訓視頻教程 教學視頻 百度網盤下載 99G
後盾網第三期PHP視頻課程[共166課時] 教學視頻 百度網盤下載 43G
後盾網實戰VIP教程之ThinkPHP微博項目系列培訓 教學視頻 百度網盤下載 12G
PHP零基礎到大型項目全程實戰視頻教程 教學視頻 百度網盤下載
韓順平PHP微信開發第二季
PHP框架之ThinkPHP項目開發CMS內容管理系統
PHP工程師培訓教程(基礎、框架、Linux、Apache、MySQL)
傳智播客PHP基礎+就業班教程
PHP面向對象mvc框架項目開發
安全中國PHP網站開發工程師就業指導班
PHP100視頻教程DVD光盤 第二季
菜鳥騰飛安全網VIP零基礎精通PHP+MySQL網絡編程課程
燕十八PHP布爾商城實戰項目
極客學院全套PHP培訓課程 attach_img
三天學會PHP爬蟲教程
黑客基地php特訓班
Memcached緩存技術在PHP應用
PHP框架之ThinkPHP項目開發CMS內容管理系統
PHP CI框架基礎視頻教程 CI項目實戰PHP CodeIgniter軟全網最低價
PHP100從入門到精通視頻教程112集
相關文章
相關標籤/搜索