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

PHP 大文件上傳配置全攻略:突破默認限制的關鍵參數詳解

     編輯:PHP 綜合知識

前言

PHP 默認上傳限制僅 2MB,生產環境常需上傳百 MB 甚至 GB 級文件。單改 upload_max_filesize 遠遠不夠,需協同調整多個 php.ini 參數,並考慮 Web 服務器層面的限制。

核心 php.ini 參數對照表(以 500MB 為例)

參數推薦值說明
file_uploadsOn總開關,必須開啟
upload_max_filesize500M單個上傳文件最大體積
post_max_size500MPOST 數據總大小,**必須 ≥ upload_max_filesize**
max_execution_time1800 (30分)腳本最大執行秒數,防大文件傳輸超時
max_input_time1800解析請求數據最大秒數(含文件上傳時間)
memory_limit256M+腳本內存上限,大文件處理時需足夠緩衝區

關鍵避坑指南

  1. post_max_size ≥ upload_max_filesize: 否則大文件被截斷,$_FILES 為空且無錯誤碼。
  2. Web 服務器同步配置:
    • Nginx: client_max_body_size 500M; (http/server/location 均可)
    • Apache: LimitRequestBody 524288000 (字節為單位)
  3. 臨時目錄權限與空間: upload_tmp_dir 指向的分區需有足夠空間且 PHP 進程可寫。
  4. Session 阻塞: 大文件上傳時,默認文件 Session 鎖會阻塞同用戶其他請求。可用 session_write_close() 提前釋放鎖,或改用 Redis Session。
  5. 分片上傳才是正道: 單次 HTTP 上傳 500MB 極不穩定,生產環境強烈建議前端分片 + 後端合併(如 Plupload、Uploader.js + 斷點續傳)。

驗證配置生效

<?php
echo "upload_max_filesize: " . ini_get('upload_max_filesize') . "<br>";
echo "post_max_size: " . ini_get('post_max_size') . "<br>";
echo "memory_limit: " . ini_get('memory_limit') . "<br>";
echo "max_execution_time: " . ini_get('max_execution_time') . "<br>";
// 實際測試上傳一個 300MB 文件,觀察 $_FILES['file']['error'] 是否為 0 (UPLOAD_ERR_OK)
?>

總結

大文件上傳是系統工程,不止 php.ini 一處。從 PHP 參數、Web 服務器、磁盤空間、內存管理、Session 鎖到前端分片策略,環環相扣。配置是基石,分片上傳架構才是生產級大文件傳輸的標準解法。

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