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

PHP 大檔案上傳設定全攻略:Apache/Nginx + php.ini 完整調教

     編輯:PHP 相關知識

核心參數對照表

指令預設建議值說明
upload_max_filesize2M100M單一檔案上限
post_max_size8M120MPOST 總資料上限,必須 > upload_max_filesize
memory_limit128M256M腳本記憶體上限,需 > post_max_size
max_execution_time30s0 (無限制)大檔上傳需更長執行時間
max_input_time60s300解析輸入資料時間

Windows + Apache + PHP 修改步驟

  1. 編輯 php.ini,搜尋上述 5 項並修改
  2. 重啟 Apache:httpd -k restart 或服務管理器重啟
  3. 驗證:php -i | findstr upload_max 或 phpinfo()

Nginx + PHP-FPM 額外設定

Nginx 預設 client_max_body_size 1m 會截斷大檔,導致 413 錯誤。

# nginx.conf / server / location 區塊
client_max_body_size 120m;  # 應 >= php.ini post_max_size

# PHP-FPM 也需確認
# www.conf
php_admin_value[upload_max_filesize] = 100M
php_admin_value[post_max_size] = 120M

修改後:nginx -s reload、systemctl reload php-fpm

進階:分塊上傳突破限制

若單檔超過 200M,建議前端採用 分片上傳:

  • 前端:WebUploader、Plupload、Uppy 切片
  • 後端:臨時儲存分片,合併時用 fopen('ab') 追加寫入
  • 優點:可斷點續傳、繞過單次 POST 體積限制、記憶體佔用低

常見錯誤排查

現象原因解決
$_FILES 為空post_max_size 過小調大 post_max_size 並重啟
413 Request Entity Too LargeNginx client_max_body_size調大 Nginx 設定並 reload
上傳中斷無錯誤max_execution_time 過短設為 0 或 300+
記憶體耗盡memory_limit 過小調大或改用分片/流式處理

安全提醒

  • 限制上傳副檔名與 MIME 類型
  • 儲存目錄設為不可執行(Nginx location ~ \.php$ { deny all; })
  • 檔案重命名避免覆蓋,病毒掃描整合 ClamAV
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved