因最近內網服務器之間下載各種升級包需要搭建一個網站或者文件服務器,上傳要能審核,下載能夠查看記錄,同事開始建議使用SVN、Gitlab等開源倉庫,最后決定用Discuz! X3.5 搭建一個下載論壇,可以方便的隱藏不需要的菜單、或者其他模塊,發帖上傳審核、下載記錄使用插件實現。
配置都已修改正常:
1)用戶組、管理組中附件相關都已設成0,即不限制大小。(后面我改成了20971520,即小于20480M)
2)httpd.conf中已增加(表示允許請求20G):LimitRequestBody 21474836480
3)php.ini(獨立內網,時間都設為了0):
upload_max_filesize = 20480M
memory_limit = 20480M
post_max_size = 20480M
max_input_time = 0
max_execution_time = 0
但是在上傳下載大附件時遇到了問題:
1、不能上傳大于4G的附件,即使設成0也一樣,是因為相關數據庫表中maxattachsize、filesize是int類型,無符號int最大在4G的樣子,我用的navicat【右鍵--》設計表】,修改以下表,并保存:
1)、usergroups_field->maxattachsize、maxsizeperday 為bigint,長度20。長度只是顯示位數,不影響最大值! 2)、attachment相關表中的filesize、maxsize 為bigint(20位) 3)、forum_attachtype->maxsize 為bigint(20位) 4)、member_count->attachsize、todayattachsize 為bigint(20位) 5)、forum_polloption_image->filesize 【圖片】為bigint(20位) 修改后重啟apache,進行上傳大于4G附件,可以看到。
2.jpg (5.38 KB, 下載次數: 11)
下載附件
2024-9-8 09:04 上傳
看起來好像正常了,但是點擊下載下來只有610M(在win10筆記本上測試的),去附件文件夾里看也確實只有610M,網上找了找沒有找到解決辦法,本來打算放棄采用別的辦法來實現,突然想到我測試過其他版本,一直用的是php7.2,改回X3.5后沒有改回php8.0,配置好php8.0后,測試4.25G、7G,一直到16G上傳都正常 去附件文件夾里看,文件大小也正常了!
附件大于4G.jpg (8.93 KB, 下載次數: 19)
下載附件
2024-9-8 09:02 上傳
但是下載卻遇到了麻煩,win10機器上下載超過3G大小后,就會看到下載速度變成0,然后又會嘗試下載幾次,最終還是會失敗。win7更慘,超過1G就是失敗。網上找了下資料,說是應該內存不夠,使用php下載會將數據緩沖到內存,只有另謀出路了,解決辦法就是用apache的mod_xsendfile模塊下載,不走php層,我用的apache24,模塊下載地址:https://github.com/nmaier/mod_xsendfile 1)、將mod_xsendfile.so放置到apache安裝目錄下的modules文件夾 2)、配置Apache 配置文件 將以下內容添加到httpd.conf中 # 加載 x-sendfile 模塊 LoadModulexsendfile_modulemodules/mod_xsendfile.so
XSendFile on 3)編輯source\module\forum\forum_attachment.php,找到下面這行(317行),然后緊接著在下面添加兩行內容, function getlocalfile($filename, $readmod =2, $range_start = 0, $range_end = 0) { header('X-Sendfile:'.$filename); exit(); /* if($readmod == 1 || $readmod == 3 ||$readmod == 4) { if($fp = @fopen($filename, 'rb')){ ……………………這些都要注釋掉……………………………… @flush(); @ob_flush();*/ } 注意最后這個} 要保留 進行下載測試,不用緩沖,直接就彈出文件保存框,win7上上傳、下載測試7G,16G均正常!已經可以滿足上傳下載各種大包的需求,更大的就沒在測試了。希望對有需要的朋友有幫助!
|