[教學] 解決WordPress上傳圖片時出現HTTP error無法上傳/使用圖片問題

最近在使用WordPress(WP, CMS)上傳圖片、上傳照片的時候,經常傳到一半就跳出錯誤訊息「HTTP error」實在有夠煩,一旦出現錯誤,就看不到縮圖、無法使用圖片,有時候根本沒傳成功,有時候則是有傳成功但看不到縮圖,可能要儲存草稿、退出後,再重新近來才會看到圖片,或是開開關關圖片編輯器幾次才出現,而且不是固定發生、有時候換去新增媒體的頁面又可以,有時候在新增媒體批次上傳又出問題,只能一個一個上傳,有時候連一個一個上傳都不給我傳!實在是非常困擾又令人生氣,一直在想是不是WordPress的Bug,終於有一天想到去Google一下,竟然找到解決方法了!開心之餘,也分享給各位,希望大家跟我一樣都可以順利解決的個issue。

一、上傳image出現問題

我的症狀是這樣,不管是在文章編輯器或媒體櫃新增媒體(media)的地方上傳,有時候就會出限HTTP error錯誤,有時又正常,狀況大概像底下這張圖這樣。

WordPress HTTP error 問題頁面截圖

二、造成HTTP error問題的原因

使用WordPress媒體上傳器(uploader功能)上傳圖片/照片出現錯誤的狀況,由於WP無法判斷這個錯誤造成的原因,因此只有顯示「HTTP error」訊息,因為只有顯示這麼侷限的資訊,根本很難除錯、抓錯,所以可能有各種不同的問題引發這個上傳錯誤問題,基本上只能一個一個解法嘗試,看看是不是該處有問題。

三、解決方案 Solutions

步驟1. 確認這個HTTP error問題是常態性/經常發生

如果這個問題是第一次發生,再觀察看看是否幾分鐘後也還是相同狀況,畢竟也有可能是你或你租用的伺服器端出問題,也有可能是中華電信/電信機房傳輸問題(機率比較低),建議也可以同時看看你連上其他網站是否有出現異常、上傳其他格式的圖檔(例如PNG/GIF/JPG)或其他圖檔(不同的檔案)試試看是否為檔案的問題。

如果以上觀察與測試都還是會發生Http Error那我們就來試試下一個方法。

步驟2. 試著增加記憶體

發生這種狀況,有一個很大的可能性是伺服器配給WordPress的記憶體不足(memory limit)問題,由於上傳時遇到記憶體不足,因此圖片上傳就中斷造成HTTP Error。

此時你可以開啟 wp-config.php 檔案,然後在檔案中增加這個程式碼:

define( 'WP_MEMORY_LIMIT', '256M' );
*說明: 這樣能夠將WP的記憶體上限加到256MB。

步驟3. 更改預設Image Editor Library

WordPress使用兩種模組來處理你上傳的圖片,分別是GD Library以及Imagick。這兩個不會同時使用,WP會使用任何一個取決於當時誰有空就找誰。但根據爬文研究,Imagick這隻比較耗記憶體資源,若你記憶體不足很有可能造成http error問題產生。因此我們接下來就要透過修改程式碼來把GD Library設定為預設的圖形處理模組(default image editor)。

請打開你的WordPress資料夾中的 functions.php 檔案(也可以透過WP後台外觀 > 佈景主題編輯器開啟) 加入以下程式碼:

function wpb_image_editor_default_to_gd( $editors ) {
    $gd_editor = 'WP_Image_Editor_GD';
    $editors = array_diff( $editors, array( $gd_editor ) );
    array_unshift( $editors, $gd_editor );
    return $editors;
}
add_filter( 'wp_image_editors', 'wpb_image_editor_default_to_gd' );

理論上這方法應該滿有效的,我個人是用這方法解決問題的,看到網路上許多英文的使用者也都是透過這方法解決。

同場加映 .htaccess 方法

另外,也可以在你的 .htaccess 檔案中,加入這段code「 SetEnv MAGICK_THREAD_LIMIT 1 」去限制Imagick圖形處理模組使用資源。

參考資料:wpbeginner網站

文章圖案來自:Unspash網。