PHP 默認上傳限制僅 2MB,生產環境常需上傳百 MB 甚至 GB 級文件。單改 upload_max_filesize 遠遠不夠,需協同調整多個 php.ini 參數,並考慮 Web 服務器層面的限制。
| 參數 | 推薦值 | 說明 |
|---|---|---|
| file_uploads | On | 總開關,必須開啟 |
| upload_max_filesize | 500M | 單個上傳文件最大體積 |
| post_max_size | 500M | POST 數據總大小,**必須 ≥ upload_max_filesize** |
| max_execution_time | 1800 (30分) | 腳本最大執行秒數,防大文件傳輸超時 |
| max_input_time | 1800 | 解析請求數據最大秒數(含文件上傳時間) |
| memory_limit | 256M+ | 腳本內存上限,大文件處理時需足夠緩衝區 |
client_max_body_size 500M; (http/server/location 均可)LimitRequestBody 524288000 (字節為單位)upload_tmp_dir 指向的分區需有足夠空間且 PHP 進程可寫。session_write_close() 提前釋放鎖,或改用 Redis Session。<?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 鎖到前端分片策略,環環相扣。配置是基石,分片上傳架構才是生產級大文件傳輸的標準解法。