View Categories

WordPress 圖片上傳失敗怎麼壓縮?SVG 被擋怎麼辦

1 分鐘閱讀

快速答案:上傳失敗分兩種:檔案超過主機設定的大小上限,要在主機端調高 PHP 的上傳上限;檔案沒超過卻出現「伺服器無法處理這張圖片」,是圖片像素太大、主機記憶體不夠產生縮圖,把長邊縮到 2560 像素以內、壓縮後再傳。SVG 被擋是 WordPress 的安全設計,用會清理 SVG 內容的外掛放行,並只開放給管理員。

為什麼會這樣 #

每上傳一張圖,WordPress 還會依佈景與外掛註冊的尺寸各產生一份縮圖,一張手機照片常變成十來個檔案。像素越大,產生縮圖時吃的記憶體越多,主機資源一不夠就失敗。WordPress 5.3 之後,長邊超過 2560 像素的照片會自動縮出一份當主要版本,但原圖仍然保留,空間照樣佔用。

大小上限不是 WordPress 決定的,而是主機的 PHP 設定(upload_max_filesize、post_max_size),有些主機前面還有一層伺服器或 CDN 的上限,超過就回 413 錯誤。媒體 → 新增媒體檔案 頁面上顯示的檔案大小上限,就是目前真正的數字。

SVG 看起來是圖片,本質卻是一段 XML 程式碼,可以夾帶 JavaScript。讓任何人上傳 SVG,等於開一扇讓人把惡意程式碼放進網站的門,所以 WordPress 預設不收。

怎麼處理 #

  1. 上傳前先處理:照片長邊縮到用得到的大小(滿版橫幅約 1920、內文圖 1200~1600 像素),用線上壓縮工具或修圖軟體輸出 JPG 或 WebP;截圖、logo 這類色塊圖用 PNG 或 WebP。檔名用英文、數字與連字號,不要中文和空白。
  2. 讓網站自動壓:先看現有的優化或快取外掛有沒有圖片最佳化功能,沒有再裝 Imagify、ShortPixel、EWWW 這類外掛;打開上傳時自動縮小超大圖片、轉 WebP,再對舊圖跑一次批次壓縮。一個網站只留一支負責圖片的外掛。
  3. 超過大小上限:在主機面板的 PHP 設定調高 upload_max_filesize 與 post_max_size,代管主機多半要開工單請主機商調整。外掛改不了主機的上限。
  4. 出現「伺服器無法處理這張圖片」:先把圖縮小再傳;常常發生的話,看主機的 PHP 記憶體與錯誤紀錄。影片則不要傳進媒體庫,放 YouTube 再嵌入。
  5. SVG:安裝 Safe SVG 這類會清理檔案內容的外掛,並限制只有管理員能上傳;Elementor 上傳 SVG 圖示另有「未過濾的檔案上傳」開關,同樣只給信得過的人。不要在 functions.php 直接放行 SVG 類型——那只是把門打開,沒有清理。只是要放一個 logo 的話,轉成 PNG 或 WebP 最省事。

我們實際遇過的情況 #

一家客戶需要上傳比較大的檔案,我們請主機端把上傳上限調到 20MB。另一個站則是所有檔案都傳不上去,最後把 PHP 升級到 8 系列才恢復正常——上傳失敗時,順便看一眼 工具 → 網站健康狀態 裡的 PHP 版本。

也有客戶問圖片壓縮是不是要另外裝外掛,檢查後發現站上已經有設定可以控制上傳圖片的大小;先看現有外掛的設定,再決定要不要多裝一支。也有網站遇過 SVG 上傳被擋,那是 WordPress 的預設保護,處理方式照上面第 5 步,不在程式裡直接開放。

什麼時候該找人 #

調高上限後還是失敗、一上傳整站就變慢或出現 500 錯誤,或要對上萬張舊圖做批次壓縮與轉檔,這些都牽涉主機資源,先備份再動。上傳資料夾(uploads)裡出現你沒傳過的 PHP 檔,那是入侵不是上傳問題,要馬上處理。相關:500/502 先查記憶體網站變慢的排查順序

常見問題 #

上傳圖片出現「伺服器無法處理這張圖片」? #

圖片像素太大,主機記憶體不夠產生縮圖。把長邊縮到 2560 像素以內、壓縮後再傳。

上傳大小上限在哪裡改? #

由主機的 PHP 設定決定(upload_max_filesize、post_max_size),在主機面板調整或請主機商改,外掛改不了。

SVG 可以直接放行嗎? #

不建議改程式直接放行。用 Safe SVG 這類會清理內容的外掛,並只開放管理員上傳。

想有人每月幫你顧著、順便教你操作:網站守護方案。先看體質:免費健檢