把一張高解析度的產品圖、一支佈景主題 zip,或一份商品匯入用的檔案拖進媒體庫,結果進度條跑到一半就跳出「超過這個網站的上傳大小限制」,相信不少剛接觸 WordPress 的人都遇過。更惱人的是有時候連錯誤訊息都看不懂,只丟一句模糊的「HTTP error」,讓人不知道是檔案太大、主機設定太小,還是別的環節卡住。
WordPress 上傳檔案限制其實不是單一一個數字,而是由好幾道設定疊出來的結果。先看懂目前的上限是多少、再判斷上傳失敗時到底卡在哪一關,比一股腦把所有參數都調大要可靠得多。這篇會先帶你找出目前的限制值,接著用錯誤訊息反推原因,最後才談依不同主機環境該怎麼調整。
WordPress 上傳檔案限制是什麼,預設值通常多少?
WordPress 上傳檔案限制指的是單一檔案透過後台媒體庫上傳時,系統允許的最大容量。超過這個容量,檔案就會被擋下來,不會進到媒體庫。
這道限制主要不是 WordPress 自己定的,而是來自網站所在的伺服器與 PHP 設定。把檔案丟上伺服器會佔用記憶體、頻寬與處理時間,限制上傳容量是為了避免單一使用者一次塞進過大的檔案,拖垮整台主機的回應速度,同時也擋掉惡意者上傳超大檔案灌爆磁碟空間的風險。換句話說,這個限制是安全與效能的折衷,不是 WordPress 故意找麻煩。
實際的預設值落差很大,常見範圍從 2MB 一路到 128MB 都有,取決於主機商與方案。早年共享主機常見的預設值是 2MB,這也是很多人第一次傳圖就卡關的原因;近期不少代管型 WordPress 主機則直接把預設拉到 128MB。WordPress 本身有相關的常數與篩選器會參與計算,但在多數情況下沒辦法蓋過伺服器層級的設定,所以真正決定上限的,往往是你的主機方案。
上傳檔案大小限制要去哪裡看?
最快的方式是直接看後台,WordPress 會把目前的上限標在上傳介面上。進到「媒體」的「新增媒體檔案」頁面,在選擇檔案的按鈕下方就會出現一行「最大上傳檔案大小」,那個數字就是目前單一檔案的上限。
如果想看得更完整,可以走「工具」裡的「網站健康狀態」,點進上方的「資訊」分頁,找到「媒體處理」這一段,裡面會列出「已上傳檔案大小上限」。同一個畫面再往「伺服器」那一段展開,還能看到幾個關鍵參數的實際值,包括 upload_max_filesize、post_max_size 與 memory_limit。這三個值合起來才是判斷能不能上傳成功的依據,光看媒體庫那一行有時候不夠。
還有一種更底層的查法是用 PHP 的 phpinfo 函式。新增一個內容只有 <?php phpinfo(); ?> 的檔案,存成例如 info.php 上傳到網站根目錄,再用瀏覽器開啟它,整台主機的 PHP 環境設定會一次列出來。這招適合排查疑難雜症,但看完務必把這個檔案刪掉,因為它會把伺服器資訊攤在公開網址上,留著有資安疑慮。
上傳失敗時,先看錯誤訊息判斷卡在哪一關
上傳失敗別急著改設定,先看 WordPress 丟出來的是哪一種訊息,不同訊息對應到不同環節,對症下藥才不會白忙一場。
超過上傳大小
HTTP error
413 過大
連結逾期
A、「超過這個網站的上傳大小限制」:這是最單純的一種,字面意思就是檔案大小直接超過 upload_max_filesize。檔案明顯比媒體庫標示的上限大時就會看到它,解法是壓縮檔案,或把上限調高。
B、「HTTP error」:這句最讓人頭痛,因為 WordPress 判斷不出確切原因,才只丟一個籠統的 HTTP error。除了檔案太大,它也可能是記憶體上限太低、uploads 目錄權限不對、暫存資料夾滿了,或主機磁碟空間用罄。遇到這個訊息要從「網站健康狀態」逐項核對 memory_limit 與目錄權限,不能只盯著上傳容量。
C、瀏覽器或伺服器回傳「413」或「request entity too large」:這通常不是 PHP 的問題,而是 Web 伺服器本身擋下來的。使用 nginx 的主機預設也有一道上傳大小防線,這道防線 PHP 與 WordPress 管不到,得另外調整 nginx 的設定。
D、「您點選的連結已過期」:這代表上傳的內容超過了 post_max_size,整個 POST 請求被擋在門外,常見於一次傳很多檔、或安裝較大的佈景主題與外掛時。重點在於提高 post_max_size,而不是只動單檔上限。
把訊息對上原因之後,下一步要釐清的是這幾個參數各自管什麼、彼此又有什麼關係。
控制上傳上限的幾個 PHP 參數各管什麼?
決定能不能順利上傳的,主要是五個 PHP 參數,它們分工不同,缺一個沒設好都可能讓上傳失敗。
- upload_max_filesize:單一檔案的容量上限,也就是媒體庫那行數字的主要來源。
- post_max_size:一次 POST 請求能傳送的資料總量上限。WordPress 上傳走的是 HTTP POST,所以這個值必須比單檔上限大,否則同時夾帶其他欄位資料時會超標。
- memory_limit:單一 PHP 程式能用的最大記憶體。顯示上傳介面、處理檔案儲存、暫存上傳內容這幾件事算在同一支程式上,這個值若小於檔案大小,程式跑到一半就會因記憶體不足而中斷。
- max_execution_time:單一程式的最長執行秒數,預設常見是 30 秒。傳大檔案需要的時間較久,太短會在傳完之前就逾時。
- max_input_time:程式接收輸入資料的最長秒數,上傳大檔案時這段時間也要夠長。
這五個值之間有合理的高低順序,照著設才不會互相打架:memory_limit 要大於或等於 post_max_size,post_max_size 又要大於或等於 upload_max_filesize;至於時間類,max_execution_time 要大於或等於 max_input_time。
最大(128M)
居中(64M)
最小(32M)
最常見的踩雷,就是只把 upload_max_filesize 調大,卻忘了 post_max_size 還停在原本的小數字,結果單檔看起來夠了、實際上傳照樣失敗。對經營 WooCommerce 商店的人來說還有一個延伸情境:批次匯入商品的 CSV、或一次上傳多張商品圖時,吃緊的往往不是單檔上限,而是 post_max_size 與處理時間,調整時記得一起看。
想調高上限,依主機環境可以怎麼改?
調高上限的方法不只一種,能用哪一種取決於你對主機的存取權限與技術熟悉度。下面從最省事的排到需要動設定檔的,挑一個你做得來的即可。
第一、直接找主機商客服。對新手這是最穩的一條路。提高上傳上限對技術客服來說是再日常不過的需求,多數主機商幾分鐘就能幫你把 upload_max_filesize 與 post_max_size 調好,省去自己摸設定檔的風險。
第二、用 cPanel 或 DirectAdmin 後台調整。台灣常見的虛擬主機多半附 cPanel,登入後在「軟體」區找到「MultiPHP INI Editor」,選好網站網域,就能直接修改 upload_max_filesize、post_max_size、memory_limit 等欄位,存檔即生效,不必碰指令。
第三、修改 php.ini 設定檔。這是最標準的做法。透過 FTP 或主機檔案管理員找到網站根目錄的 php.ini,沒有的話自己新增一個,填入需要的數值,例如:
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
max_execution_time = 300
注意單位用 M 不是 MB,這是 PHP 的寫法。改完別忘了讓 PHP 重新載入設定才會生效。
第四、修改 .htaccess 檔。如果主機跑的是 Apache,可以在根目錄的 .htaccess 加上對應指令:
php_value upload_max_filesize 64M
php_value post_max_size 128M
php_value memory_limit 256M
php_value max_execution_time 300
這招在部分以 CGI 模式跑 PHP 的主機上會反而觸發 500 錯誤,遇到的話就改用 php.ini 或 .user.ini 的方式。
第五、改佈景主題的 functions.php。在主題的 functions.php 用 @ini_set() 動態設定也行,但建議透過程式碼片段管理外掛來加,避免直接編輯主題檔改壞網站。這個方法不是每個主機環境都吃得到,當備案就好。
第六、裝專門的外掛。不想碰任何設定檔的人,可以裝上傳容量調整類的外掛,在後台用下拉選單把上限往上拉。要留意外掛只能在主機允許的範圍內調整,沒辦法突破主機商設下的硬上限;而且外掛一旦停用,容量就會打回原設定。
第七、用 nginx 的主機要額外調一道。前面提到 nginx 有自己的上傳防線,除了改 PHP 設定,還要在 nginx 設定檔的 http、server 或 location 區塊裡加上 client_max_body_size,把值設到跟 PHP 一致,再重新載入 nginx 才算完整。
如果檔案大到幾百 MB(例如影片),與其硬調上限,更實際的做法是透過 FTP 直接把檔案放到伺服器,或乾脆把影片放到 YouTube、Vimeo 之類的平台再嵌入,既避開上傳限制,也不會讓自家主機被大檔拖慢。
改完還是失敗,可能卡在哪些地方?
照著上面改完、上限卻沒變或還是傳不上去,多半是踩到下面幾種狀況。
設定檔改了沒生效,常見是 PHP 把設定快取住了。改完 php.ini 或 .user.ini 後要重啟 PHP;共享主機沒有指令權限的話,就請主機商幫忙重新載入 PHP 設定。
改 .htaccess 後跳出 500 錯誤,通常是主機以 CGI 模式跑 PHP,不支援在 .htaccess 寫 php_value 指令。把剛加的那幾行移除,改用 php.ini 或 .user.ini 的方式設定即可。
健康狀態顯示新數字、但上傳照樣失敗,要回頭檢查三個值有沒有同步。最典型的疏漏是把 upload_max_filesize 調大、post_max_size 卻還比檔案小,這樣上傳一定失敗;務必讓 post_max_size 大於單檔上限,memory_limit 又大於或等於 post_max_size。
怎麼調都卡在某個數字上不去,很可能是主機方案本身設了硬上限。部分共享主機在基礎設施層級就鎖死了 PHP 上傳天花板,任何設定檔都改不動。自助方法全試過都無效時,直接問主機商能不能放寬;長期都不夠用,就該考慮換到限制更寬鬆的代管型主機。
另外,網站若掛了 CDN、防火牆或 WAF,這些中間層也可能各自設有上傳大小或請求逾時的限制。PHP 與 nginx 都調好了還是傳不過,記得把這幾道防護一併列入排查。
弄懂 WordPress 上傳檔案限制之後會發現,重點從來不是把每個數字無腦調到最大,而是先在媒體庫和網站健康狀態看清楚現況,再用錯誤訊息反推卡在哪一關,最後只動該動的那幾個參數。下次再遇到上傳失敗,先別急著到處亂改,照著「先看上限、再讀訊息、後對參數」的順序走,多數情況自己就能判斷出問題出在哪。真的卡在主機硬上限或不敢動設定檔,把這篇整理出的環節描述給主機商客服,他們也能更快幫你處理。