預設 PHP 限制上傳檔案 2MB,若需支援大檔案(如 100MB+),必須調整 php.ini 多項參數,並考量網路傳輸時間與記憶體限制。
| 參數 | 預設 | 建議值(大檔案) | 說明 |
|---|---|---|---|
file_uploads | On | On | 啟用 HTTP 檔案上傳 |
upload_tmp_dir | 系統暫存目錄 | /tmp 或專用目錄 | 暫存檔存放路徑,需可寫且空間足夠 |
upload_max_filesize | 2M | 200M | 單一檔案最大值 |
post_max_size | 8M | 210M | POST 總資料上限,必須 ≥ upload_max_filesize + 表單其他欄位 |
| 參數 | 預設 | 建議值 | 說明 |
|---|---|---|---|
max_execution_time | 30 | 600 (秒) | 腳本最大執行時間,上傳大檔需更久 |
max_input_time | 60 | 600 (秒) | 接收 POST 資料最大時間 |
memory_limit | 8M | 128M+ | 腳本記憶體上限,處理大檔案時可能需更多 |
; php.ini
file_uploads = On
upload_tmp_dir = /var/tmp/php_upload
upload_max_filesize = 200M
post_max_size = 210M
max_execution_time = 600
max_input_time = 600
memory_limit = 256M
client_max_body_size 210M; 在 http 或 server 區塊。LimitRequestBody 220200960(位元組)。request_terminate_timeout = 600 防止進程被強制終止。$_FILES['file']['tmp_name'] 搬移檔案時,若跨分區需 move_uploaded_file(同分區可 rename)。WebUploader、Uppy),後端合併,避免單一請求超時。$_FILES['type'],改用 finfo_file 或 mime_content_type 檢測真實 MIME。修改完成後重啟 PHP-FPM / Apache,上傳一個 200MB 測試檔,觀察 $_FILES['error'] 是否為 UPLOAD_ERR_OK (0)。若出現 UPLOAD_ERR_INI_SIZE (1) 或 UPLOAD_ERR_FORM_SIZE (2),再檢查上述參數是否生效(phpinfo() 確認)。