phpMyAdmin 匯入 SQL 檔案時,預設受限於 PHP 設定僅允許 2MB (2048KB)。本文說明三個關鍵 php.ini 參數的含義、調整原則、依伺服器規格的建議數值,並提供驗證步驟與常見陷阱。
| 參數 | 預設值 | 功能 | 建議調整 |
|---|---|---|---|
upload_max_filesize | 2M | 單一檔案上傳大小上限 | 20M~100M (視需求) |
post_max_size | 8M | POST 請求主體總大小上限 (含所有表單欄位) | ≥ upload_max_filesize + 10% |
memory_limit | 128M | 腳本最大可用記憶體 | ≥ post_max_size,建議 256M~512M |
memory_limit ≥ post_max_size > upload_max_filesize; === 檔案上傳與記憶體設定 === ; 允許上傳 50MB 的 SQL 檔案 upload_max_filesize = 50M ; POST 總大小略大於檔案上限 (含表單其他欄位) post_max_size = 60M ; 腳本記憶體上限 (解析大型 SQL 需較多記憶體) memory_limit = 256M ; === 額外建議參數 === ; 最大執行時間 (大檔匯入可能超過 30 秒) max_execution_time = 300 ; 最大輸入處理時間 max_input_time = 300 ; 允許的最大輸入變數數量 (防止大型陣列攻擊) max_input_vars = 5000
| 伺服器記憶體 | upload_max_filesize | post_max_size | memory_limit | 適用場景 |
|---|---|---|---|---|
| 1 GB (入門 VPS) | 20M | 25M | 128M | 中小型專案、部落格 |
| 2 GB | 50M | 60M | 256M | 電商、企業官網 |
| 4 GB+ | 100M | 120M | 512M | 大型系統、資料遷移 |
| 8 GB+ (專用 DB 伺服器) | 200M | 250M | 1G | 巨量資料匯入、備份還原 |
php.ini (通常在 /etc/php/7.x/apache2/php.ini 或 /usr/local/php/etc/php.ini);systemctl restart apache2 或 service httpd restartsystemctl restart php-fpm (Nginx 無需重啟)phpinfo.php 檢查生效值<?php // phpinfo.php phpinfo(); // 搜尋 upload_max_filesize、post_max_size、memory_limit
或命令列快速查看:
php -i | grep -E 'upload_max_filesize|post_max_size|memory_limit'
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| 修改後仍失敗 | 編輯錯誤的 php.ini | 用 php --ini 確認載入路徑 |
| 上傳大檔案中斷 | Nginx client_max_body_size 限制 | 在 nginx.conf http 區塊加 client_max_body_size 100M; |
| Apache 超時 | Timeout 設定過短 | Timeout 300 在 httpd.conf |
| PHP-FPM 回應 502 | request_terminate_timeout | request_terminate_timeout = 300 在 www.conf |
| 記憶體不足錯誤 | memory_limit 過小 | 調大 memory_limit 或分批匯入 |
若資料庫極大 (>100MB),建議直接使用命令列工具,效能更好且無上傳限制:
# 匯出 mysqldump -u root -p --single-transaction --quick db_name > backup.sql # 匯入 (最快、最穩定) mysql -u root -p db_name < backup.sql # 或壓縮傳輸 mysqldump -u root -p db_name | gzip > backup.sql.gz gunzip < backup.sql.gz | mysql -u root -p db_name
upload_max_filesize 設過大,防止惡意上傳耗盡磁碟/記憶體。/tmp 與上傳目錄的暫存檔。