婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP大文件分片上傳的實現方法

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

熱門標簽:神龍斗士電話機器人 宿州正規外呼系統軟件 代理打電話機器人 電信外呼系統多少錢一個月 企業400電話辦理多少費用 太原400電話申請流程 桂陽公司如何做地圖標注 合肥企業外呼系統線路 萍鄉商鋪地圖標注

一、前言

在網站開發中,經常會有上傳文件的需求,有的文件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大文件分片上傳的實現方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

您可能感興趣的文章:
  • PHP大文件分割上傳 PHP分片上傳
  • php上傳大文件設置方法
  • php上傳大文件失敗的原因及應對策略
  • 用php如何解決大文件分片上傳問題

標簽:綏化 廊坊 太原 崇左 鄂州 辛集 白銀 衡陽

巨人網絡通訊聲明:本文標題《PHP大文件分片上傳的實現方法》,本文關鍵詞  PHP,大,文件,分片,上傳,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP大文件分片上傳的實現方法》相關的同類信息!
  • 本頁收集關于PHP大文件分片上傳的實現方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 盐池县| 迭部县| 绥德县| 会昌县| 财经| 孝义市| 广西| 望都县| 禹州市| 大兴区| 固原市| 保靖县| 南充市| 吴忠市| 若尔盖县| 射阳县| 金平| 嘉峪关市| 寻乌县| 凤翔县| 静安区| 横山县| 京山县| 莎车县| 南平市| 高阳县| 卢氏县| 永宁县| 平乡县| 翁源县| 府谷县| 华宁县| 新化县| 池州市| 西丰县| 喀喇沁旗| 准格尔旗| 温宿县| 灵璧县| 砚山县| 海阳市|