濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > PHP大文件分片上傳的實(shí)現(xiàn)方法

PHP大文件分片上傳的實(shí)現(xiàn)方法

熱門標(biāo)簽:神龍斗士電話機(jī)器人 宿州正規(guī)外呼系統(tǒng)軟件 代理打電話機(jī)器人 電信外呼系統(tǒng)多少錢一個(gè)月 企業(yè)400電話辦理多少費(fèi)用 太原400電話申請(qǐng)流程 桂陽(yáng)公司如何做地圖標(biāo)注 合肥企業(yè)外呼系統(tǒng)線路 萍鄉(xiāng)商鋪地圖標(biāo)注

一、前言

在網(wǎng)站開發(fā)中,經(jīng)常會(huì)有上傳文件的需求,有的文件size太大直接上傳,經(jīng)常會(huì)導(dǎo)致上傳過程中耗時(shí)太久,大量占用帶寬資源,因此有了分片上傳。

分片上傳主要是前端將一個(gè)較大的文件分成等分的幾片,標(biāo)識(shí)當(dāng)前分片是第幾片和總共幾片,待所有的分片均上傳成功的時(shí)候,在后臺(tái)進(jìn)行合成文件即可。

二、開發(fā)過程中遇到的問題

  1. 分片的時(shí)候每片該分多大size?太大會(huì)出現(xiàn)“413 request entity too large”
  2. 分片上傳的時(shí)候并不是嚴(yán)格按照分片的序號(hào)順序上傳,如何判斷所有的分片均上傳成功?
  3. 合成文件的時(shí)候如何判斷保證合成一個(gè)完整的文件而不出錯(cuò)?多個(gè)分片同時(shí)上傳的時(shí)候,讀寫文件沒有獨(dú)占鎖的時(shí)候會(huì)導(dǎo)致合成錯(cuò)誤。

三、問題解決

當(dāng)出現(xiàn)413的時(shí)候,修改了 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)先獲取當(dāng)前分片是第幾片以及總共幾片

    (2)創(chuàng)建一個(gè)文件夾用來存儲(chǔ)所有的分片以及合成的文件

 

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

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

       $target變量代表合成后的文件名,file_exists判斷是否已經(jīng)合成成功,然后追加方式創(chuàng)建打開文件,循環(huán)將每個(gè)分片內(nèi)容寫入一個(gè)文件中。

       在讀取每個(gè)分片之前先判斷當(dāng)前分片是否存在,是為了防止多個(gè)進(jìn)程執(zhí)行合成文件代碼塊的時(shí)候?qū)е履硞€(gè)分片已經(jīng)寫入刪除,最后導(dǎo)致合成的文件是不完整的,此時(shí)需要?jiǎng)h除合成的不完整的文件并退出exit當(dāng)前進(jìn)程。

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

總結(jié)

以上所述是小編給大家介紹的PHP大文件分片上傳的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

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

標(biāo)簽:綏化 廊坊 太原 崇左 鄂州 辛集 白銀 衡陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP大文件分片上傳的實(shí)現(xiàn)方法》,本文關(guān)鍵詞  PHP,大,文件,分片,上傳,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP大文件分片上傳的實(shí)現(xiàn)方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于PHP大文件分片上傳的實(shí)現(xiàn)方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    连南| 天津市| 阜新| 分宜县| 海伦市| 通许县| 黄浦区| 武强县| 拉萨市| 湖南省| 古蔺县| 酒泉市| 旅游| 扬州市| 平昌县| 喀喇沁旗| 柞水县| 康保县| 香河县| 方正县| 蒙城县| 河源市| 虞城县| 东阳市| 陈巴尔虎旗| 正阳县| 江山市| 商都县| 鄂温| 桃江县| 兴安盟| 石渠县| 崇礼县| 莱阳市| 新闻| 蒙自县| 左权县| 齐齐哈尔市| 荔波县| 榕江县| 子洲县|