首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 解決大於 8MB 檔案無法上傳問題:配置檢查清單與分片上傳升級方案

     編輯:PHP 相關知識

預設 PHP 安裝限制上傳 2MB(`upload_max_filesize`),實際常遇 8MB 瓶頸(`post_max_size` 預設 8MB)。本文提供系統排查清單、配置修改指南與現代分片上傳架構建議。

一、三大核心配置項(必須協同修改)

配置項預設值建議值(100MB 例)層級
upload_max_filesize2M100MPHP
post_max_size8M110M (> upload_max_filesize)PHP
memory_limit128M256MPHP
max_execution_time30300 (秒)PHP
max_input_time60300PHP
client_max_body_size1m100mNginx

二、修改生效驗證步驟

  1. 編輯 `php.ini`(或 `.user.ini`、`.htaccess`、`ini_set()`)。
  2. 重載 PHP-FPM:systemctl reload php-fpm 或 service php7.4-fpm reload。
  3. 重載 Nginx:nginx -t && nginx -s reload。
  4. 驗證:建立 `phpinfo.php` 確認生效值,或上傳測試檔案。

三、常見遺漏陷阱

  • 多 php.ini 生效:CLI/FPM/Apache 模組各有獨立配置,用 `php --ini` 確認載入路徑。
  • .user.ini 快取:PHP 掃描間隔由 `user_ini.cache_ttl` 控制(預設 300 秒),修改後需等待或重載 FPM。
  • Nginx 代理緩衝:`proxy_request_buffering off` 避免大請求寫入磁碟造成延遲。
  • 瀏覽器/代理限制:企業防火牆、CDN、負載均衡器可能另有請求大小限制。

四、現狀分析:為何 8MB 以上「頁面無反應」?

  • post_max_size (8M) < 上傳檔案 → PHP 直接丟棄 `$_POST` 和 `$_FILES`,`$_FILES` 為空陣列。
  • 瀏覽器持續上傳,伺服器提前關閉連線(Nginx 413 或 PHP 直接拒絕),前端無法收到正常回應,表現為「卡住」「無反應」。
  • 資料庫僅記錄檔名(INSERT 執行),但 `$_FILES['size']` 為 0 或缺失,導致大小欄位為空。

五、升級方案:分片上傳(徹底突破單請求限制)

參考《PHP 大檔案上傳配置全攻略》分片架構。核心優勢:

  • 單分片 1-5MB,遠低於各層限制,無需大幅調整配置。
  • 支援斷點續傳、秒傳、多線程並發、上傳進度精準顯示。
  • 後端無需載入完整檔案到記憶體,記憶體壓力極低。

六、總結

修改 `upload_max_filesize`、`post_max_size`、`memory_limit`、`max_execution_time`、`client_max_body_size` 五大參數並重載服務,可解決 8MB 瓶頸。**但單請求上傳大檔案本質脆弱**,生產環境強烈建議遷移至**分片上傳架構**(Uppy/WebUploader + 後端合併 API),一次性解決大小、超時、斷點、進度、秒傳所有痛點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved