91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用PHP怎么對大文件進行分片上傳

發布時間:2020-12-25 15:25:55 來源:億速云 閱讀:226 作者:Leah 欄目:開發技術

使用PHP怎么對大文件進行分片上傳?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

一、前言

在網站開發中,經常會有上傳文件的需求,有的文件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

使用PHP怎么對大文件進行分片上傳

(2)php.ini添加post_max_size 和 upload_max_filesize

重啟nginx和php-fpm

代碼邏輯梳理和分享

    (1)先獲取當前分片是第幾片以及總共幾片

    (2)創建一個文件夾用來存儲所有的分片以及合成的文件

 使用PHP怎么對大文件進行分片上傳

   (3)變量$done初始為true,用來判斷是否所有的分片都上傳完成,每個分片保存的時候使用分片序號作為文件名,然后判斷所有的分片文件是否存在

使用PHP怎么對大文件進行分片上傳

    (4)當$done===true的時候,代表所有分片上傳完成,合成文件。     

使用PHP怎么對大文件進行分片上傳

       $target變量代表合成后的文件名,file_exists判斷是否已經合成成功,然后追加方式創建打開文件,循環將每個分片內容寫入一個文件中。

       在讀取每個分片之前先判斷當前分片是否存在,是為了防止多個進程執行合成文件代碼塊的時候導致某個分片已經寫入刪除,最后導致合成的文件是不完整的,此時需要刪除合成的不完整的文件并退出exit當前進程。

       其中每個分片最好設置獨占鎖,flock($in, LOCK_EX),用來保證讀寫分片的時候其他進程不會操作該分片。最后刪除分片unlink以及釋放獨占鎖。

看完上述內容,你們掌握使用PHP怎么對大文件進行分片上傳的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卓资县| 宜都市| 南阳市| 丰都县| 临夏县| 蒲江县| 方正县| 堆龙德庆县| 麦盖提县| 公安县| 崇明县| 凤冈县| 达拉特旗| 岳西县| 当阳市| 井冈山市| 东兰县| 会宁县| 古田县| 大新县| 雷州市| 张掖市| 潞城市| 石泉县| 旺苍县| 黄龙县| 秭归县| 兰西县| 阿拉善右旗| 镇雄县| 旺苍县| 鹿邑县| 和静县| 固安县| 开平市| 高淳县| 常宁市| 融水| 霞浦县| 黄龙县| 邳州市|