近期因為協助工作室官網搬遷主機的緣故,在新主機上傳圖片發生 HTTP 錯誤的問題,我記得之前在處理客戶網站時也曾經發生過,就把過往記錄調出來看,現在將可能原因以及有效解法紀錄於下,也方便未來查找。

基本上之前之所以發生這種問題,通常原因是檔案上傳的權限導致、抑或者是檔案太大造成、記憶體限制問題、又或者是圖片檔名採用了中文的緣故,也有人說是 WordPress bug、或是升級導致,更有一說是因為 PHP 在上傳檔案時會先暫存在 /tmp 目錄,如果該目錄不存在,或 PHP 沒有足夠的權限去寫入它,也可能導致上傳錯誤的問題發生……;總之,原因很多,我其實比較建議查找 Error log 來觀看原因。

由於這次我們發生的原因是因為更換主機產生,所以上述可能性我們都排除,我想起很久以前曾經在 WordPress 官方看過這串討論,推測應該是 PHP Image Library 所引起的原因,因為 WordPress 預設是使用 ImageMagick 程式來處理縮圖,所以如果你的主機未安裝 ImageMagick 或者版本過舊就會導致上傳圖片失敗的情況產生。由於我們的新主機是 VPS,所以請團員們處理了相關問題,安裝 ImageMagick 並升級之後就可以順利上傳,估計此問題是因為 WordPress 的安全性更新,所以如果 ImageMagick 版本過舊就無法使用。

WordPress 官方這則討論串的作法是在佈景主題的 functions.php 檔案中加入以下程式碼,將 WordPress 預設的圖形處理模組改用 GD 而非使用 ImageMagick 程式,但這其實是治標之法,如果你的主機權限允許,建議還是直接安裝或是升級 ImageMagick 程式, 而非把預設的換成 GD 這樣才是完美的解法。