由於更新文章時,上傳圖片的時候遇到這個錯誤

這個錯誤如果用Google 找,會找到很多種解法(詳細方法附在下方的參考資料中,有興趣的可以去試試看),方法不外乎就是

  1. PHP設定定義的Memory Limit值太低,導致記憶體不足 => 這個我嘗試放大後,重啟伺服器,無效
  2. 禁用 “BIG Image” threshold設定 => 不管是加設定在functions.php還是用裝外掛的方式,無效
  3. WordPress 與PHP版本太新了,導致問題,建議降版使用PHP7.2 => 基於安全性,哪有在用降版來解決問題的?除非短解!=> 直接放棄不嘗試
  4. 把圖片再縮小 => 這個方法我相信是有用啦,但我就是要上傳大圖片,問題還是沒解決啊~

我自己系統是用Nginx+PHP 7.4的組合,而且Wordpress 的版本會一直更新在最新的狀態

想想覺得納悶,我明明是上傳有縮小像素的圖檔,單邊最高的解析度不會超過2048,怎麼還會遇到問題?

 

檢查過PHP設定中的檔案上傳設定,主要是以下這兩樣

upload_max_filesize = 2M

post_max_size = 8M

這邊的設定值,也會直接在你上傳檔案的時候,會標註在下方讓你知道:

在研究一下,發現上傳失敗的檔案都有個共同的特徵,那就是超過1MB 的大小就沒辦法再上傳了

既然PHP的設定沒問題,那是時候來看一下Nginx的設定了

這才明白,Nignx設定有一個 client_max_body_size 的值,這個值負責定義Client可以請求的內容大小,當請求的大小超過伺服器可以處理的限度,那伺服器就會關閉連線以防止客戶端繼續傳送該請求

而這個值,如果沒有定義的話,預設值正是1MB

這個設定參數可以被設定在http、server、location的區塊中,如果想要讓這個設定對整個伺服器都生效的話,只要把他設定在http區塊裡面就可以了!

可以設定上限值,設定如下:

http {
    ...

    # 設定請求內容大小上限值為 5MB
    client_max_body_size 5m;

    ...
}

也可以定義無上限:

http {
    ...

    # 設定請求內容大小無上限
    client_max_body_size 0;

    ...
}

 

設定完後,重啟Nginx,重新上傳檔案就可以順利上傳了!

 

這個設定值與PHP的檔案上傳大小設定息息相關,若是上傳有問題可別忘了也檢查這個值的大小喔!

 

參考文獻:

WordPress上傳圖片,由於伺服器繁忙或沒有足夠的資源,因此無法完成圖片後期處理。

WordPress上传图片出现“图像后期处理失败,请将其缩小到2500像素并重新上传”的解决办法

WordPress上传图片失败,提示图像后期处理失败

PHP 檔案上傳 遇到 容量太大 要修改 php.ini 的參數

Nginx 網頁伺服器出現 client intended to send too large body 錯誤解決方法

發表迴響