跳至內容
設定

如何提高 WordPress 上傳限制(適用任何主機)

先查看目前的 WordPress 上傳限制,再在適合你主機的位置提高它:php.ini、.user.ini、.htaccess、cPanel、Nginx 或 Cloudflare。

發布於 更新於

要提高 WordPress 的上傳限制,就要在主機實際讀取的設定檔中調高兩個 PHP 設定:upload_max_filesize 和 post_max_size。在你自己管理的伺服器上是 php.ini;在大多數執行 PHP-FPM 或 FastCGI 的共享主機上是 .user.ini;只有 Apache 以模組方式執行 PHP 時才是 .htaccess;cPanel 則使用 MultiPHP INI Editor。如果伺服器執行 Nginx,還要調高 client_max_body_size。修改 wp-config.php 不會改變上傳限制。

WordPress 最大上傳大小工具可以把一個目標大小轉換成 php.ini(或 .user.ini)、.htaccess 和 wp-config.php 中相互對應的數值,直接貼上即可,不必手動輸入。

步驟 1:查看目前的上傳限制

動手修改前,先弄清楚現在的限制是多少,以及是哪個設定決定的。

  • 媒體 > 新增媒體檔案。 上傳畫面會顯示最大上傳檔案大小,這就是你要提高的數字。
  • 工具 > 網站狀態 > 資訊。 展開「媒體處理」。網站狀態說明文件列出了那裡顯示的內容:允許的 POST 資料最大大小、上傳檔案的最大大小,以及兩者中較小的那個,也就是最大有效檔案大小。「伺服器」區段會顯示更多 PHP 數值。
WordPress 的 Upload Media 畫面,上傳區域下方有一行 Maximum upload file size: 2 GB
限制顯示在上傳畫面的上傳區域下方。2 GB 是我們測試伺服器的值,許多主機商設定得低很多。
WordPress 網站健康狀態資訊的 Media Handling 區段,列出 max size of post data allowed、max size of an uploaded file 和 max effective file size
我們測試網站上的工具 > 網站健康狀態 > 資訊 > 媒體處理,文章資料、上傳檔案和實際生效的限制分別顯示在不同列。

WordPress 在 wp_max_upload_size() 中計算上傳限制,它從 PHP 讀取 upload_max_filesize 和 post_max_size,並取較小的那個。如果一個是 64M、另一個是 8M,你的限制就是 8M。

步驟 2:了解哪些設定有影響

設定限制的內容PHP 預設值可以在哪裡修改
upload_max_filesize單一上傳檔案的最大大小2Mphp.ini、.user.ini、.htaccess、httpd.conf
post_max_size整個 POST 請求,包含檔案8Mphp.ini、.user.ini、.htaccess、httpd.conf
memory_limitPHP 執行時可用的記憶體128M任何地方,包括 wp-config.php
max_execution_time指令碼可執行的秒數30任何地方,包括 wp-config.php
client_max_body_size(Nginx)Nginx 接受的請求內容大小1m只有 Nginx 設定

PHP 預設值和修改模式來自 php.ini 指令清單;Nginx 預設值來自 Nginx 核心模組說明文件。大多數主機設定的值都高於 PHP 預設值,所以要到網站狀態查看你的實際數字。

upload_max_filesize 和 post_max_size 是 PHP 所謂的 INI_PERDIR 設定:它們「可以在 php.ini、.htaccess、httpd.conf 或 .user.ini 中設定」,其他地方都不行。memory_limit 不限制檔案大小,但 WordPress 需要記憶體來為大圖產生縮放副本,所以大檔案上傳成功後,仍可能因記憶體耗盡錯誤而失敗。

步驟 3:在適合你主機的位置提高限制

你的環境在哪裡設定說明
VPS 或專屬伺服器PHP 實際載入的 php.ini之後重新啟動 PHP-FPM 或 Apache
使用 PHP-FPM 或 FastCGI 的共享主機WordPress 根目錄中的 .user.ini最多可能需要 5 分鐘才生效
以模組方式執行 PHP 的 Apache(mod_php)使用 php_value 的 .htaccess在 PHP-FPM 或 FastCGI 下會造成 500 錯誤
cPanel 主機Software > MultiPHP INI Editor自動幫你寫入 php.ini、.user.ini 或 .htaccess
PHP 前面有 Nginx除了 PHP 數值還要設定 client_max_body_size否則 Nginx 會回傳 413
代管型 WordPress 主機主機控制台或客服許多主機在平台層級限制上傳
網站位於 Cloudflare 後方Cloudflare 自己的上傳限制Free 和 Pro 方案為 100 MB

php.ini(你自己管理的伺服器)

先找出被載入的檔案。建立一個內容為 <?php phpinfo(); 的暫存檔,在瀏覽器中開啟,查看「Loaded Configuration File」那一行,然後刪除這個檔案。編輯那個 php.ini:

upload_max_filesize = 128M
post_max_size = 130M
max_execution_time = 300

接著重新啟動 PHP,讓它讀取修改。使用 PHP-FPM 時,服務名稱會包含版本,例如在 Debian 或 Ubuntu 上執行 sudo systemctl restart php8.3-fpm。使用 mod_php 時,請重新啟動 Apache。

.user.ini(大多數共享主機)

PHP 只有以 CGI 或 FastCGI(包括 PHP-FPM)方式執行時,才會讀取 .user.ini 檔案。在 wp-config.php 所在的資料夾中建立或編輯 .user.ini:

upload_max_filesize = 128M
post_max_size = 130M

PHP 每隔 user_ini.cache_ttl 秒重新讀取這些檔案,預設是 300 秒。認定無效之前請先等五分鐘,能重新啟動 PHP-FPM 的話也可以直接重啟。

.htaccess(僅限使用 mod_php 的 Apache)

php_value upload_max_filesize 128M
php_value post_max_size 130M

PHP 手冊說明這些指令適用於以 Apache 模組方式執行的 PHP。如果儲存後網站立刻出現 500 Internal Server Error,代表 PHP 是以 FastCGI 或 PHP-FPM 方式執行。請刪除這幾行,改用 .user.ini。

cPanel MultiPHP INI Editor

在 cPanel 中開啟 Software > MultiPHP INI Editor,選擇你的網域,在 Basic Mode 中修改數值。根據 cPanel 說明文件,Basic Mode 會把設定存到支援該設定的 php.ini、.user.ini 和 .htaccess 檔案中,所以你不需要知道伺服器用的是哪一個。

Nginx

Nginx 會在 PHP 看到請求之前先檢查請求大小。當請求大於 client_max_body_size 時,Nginx 會回傳 413 Request Entity Too Large。預設值是 1m。在 server 區塊中加入一個至少和 post_max_size 一樣大的值:

client_max_body_size 130M;

用 sudo nginx -t && sudo systemctl reload nginx 測試並重新載入。在 Apache 上,類似的設定是 LimitRequestBody,在一般 WordPress 主機上很少需要修改。

代管主機和 Cloudflare

有些代管型 WordPress 主機會忽略你的 php.ini 或 .user.ini,在整個平台層級設定限制。如果修改後網站狀態仍顯示舊數字,請詢問主機上限是多少、能不能提高。

如果網站經過 Cloudflare,Cloudflare 也有自己的限制。它的快取說明文件列出的最大上傳大小為:Free 和 Pro 方案 100 MB,Business 方案 200 MB,Enterprise 方案最高 5 GB。任何 PHP 設定都無法突破這個限制。

為什麼 wp-config.php 沒有作用

很多文章建議在 wp-config.php 中加入:

@ini_set( 'upload_max_filesize', '128M' );
@ini_set( 'post_max_size', '130M' );

這兩個設定都是 INI_PERDIR,而 PHP 說明文件指出這種模式的設定不能用 ini_set() 設定。@ 會隱藏失敗,所以這幾行看起來無害,實際上什麼也沒改變。wp-config.php 能改的是記憶體,因為 memory_limit 在任何地方都能設定:

define( 'WP_MEMORY_LIMIT', '256M' );

當大圖在處理過程中失敗時,這會有幫助。但它不會改變最大上傳檔案大小。

步驟 4:確認修改已生效

重新載入「媒體 > 新增媒體檔案」,檢查最大上傳檔案大小是否顯示新的數值。如果沒有:

  • 檢查 post_max_size 是否至少和 upload_max_filesize 一樣大。WordPress 會取較小的那個。
  • 確認你編輯的是 PHP 實際載入的檔案。放錯資料夾的 php.ini 會被忽略。
  • 修改 .user.ini 後等五分鐘,或重新啟動 PHP-FPM。
  • 如果 WordPress 中的數字變了,但上傳仍以 413 失敗,阻擋來自 Nginx、主機的代理伺服器或 Cloudflare。
  • 如果檔案已抵達 WordPress 後才以「HTTP error」失敗,問題就不在大小了。我們關於 WordPress 上傳圖片時出現 HTTP 錯誤的指南介紹了常見原因。

應該設定多高?

依你實際需要上傳的最大檔案來設定,保留一點餘裕,並讓 post_max_size 略高於 upload_max_filesize。大檔案上傳也比較花時間,所以如果大檔案在慢速連線下逾時,請提高 max_execution_time。對於長影片或備份壓縮檔這類非常大的檔案,透過 SFTP 或分段上傳外掛上傳,通常比一次超大的瀏覽器上傳更可靠,而且 Cloudflare 方案的限制本來就可能讓瀏覽器上傳行不通。

確定目標後,最大上傳大小工具會幫你寫好相互對應的 PHP 設定行。如果你的伺服器執行 Nginx,請自行加上本指南中的 Nginx 那一行。

FAQ

常見問題

如何查看 WordPress 目前的上傳限制?

前往「媒體 > 新增媒體檔案」。上傳畫面會顯示最大上傳檔案大小。想看背後的細節,請開啟「工具 > 網站狀態 > 資訊」並展開「媒體處理」,那裡列出了上傳檔案的最大大小、POST 資料的最大大小,以及兩者中較小的那個,也就是最大有效檔案大小。

為什麼 WordPress 顯示上傳的檔案超過 php.ini 中的 upload_max_filesize 指令?

檔案大於 PHP 的 upload_max_filesize 設定。這個限制不是 WordPress 設定的,而是從 PHP 讀取的。請在 php.ini、.user.ini 中,或在使用 mod_php 的 Apache 上透過 .htaccess,同時提高 upload_max_filesize 和 post_max_size。PHP 本身的 upload_max_filesize 預設值只有 2M,不過大多數主機都設得更高。

可以從 wp-config.php 提高上傳限制嗎?

不行。upload_max_filesize 和 post_max_size 屬於 PHP_INI_PERDIR 設定,PHP 只接受來自 php.ini、.htaccess、httpd.conf 或 .user.ini 的值。wp-config.php 中的 ini_set() 敘述執行時不會出錯,但什麼都不會改變。wp-config.php 可以提高 WordPress 的記憶體限制,但限制檔案大小的並不是記憶體。

提高 PHP 限制後為什麼還是出現 413 Request Entity Too Large?

PHP 前面的某個環節拒絕了請求。在 Nginx 上是 client_max_body_size,預設值為 1m,超過時會回傳 413 錯誤。請在 server 區塊中提高它並重新載入 Nginx。如果網站經過 Cloudflare,方案的上傳大小限制也可能在請求抵達伺服器之前就把它擋下。

post_max_size 需要比 upload_max_filesize 大嗎?

至少要一樣大,稍大一點更保險。檔案是和其他表單資料一起放在一個 POST 請求中送出的,所以整個請求都會計入 post_max_size。WordPress 取兩者中較小的值作為上傳限制,因此只提高 upload_max_filesize,限制不會有任何改變。