使用 GD 函式 imagecreatefromjpeg() 處理部分 JPEG 檔案時,可能出現警告:gd-jpeg, libjpeg: recoverable error: Invalid SOS parameters for sequential JPEG,導致縮圖生成失敗。本文說明成因與一行程式碼即可解決的方法。
部分 JPEG 檔案(特別是經過特定軟體壓縮或編輯的檔案)其 SOS (Start of Scan) 區段參數不符合標準,libjpeg 預設嚴格模式會報錯並中止解碼。這不代表檔案損壞,瀏覽器通常仍能正常顯示。
在腳本最開頭或 php.ini 設定:
<?php
// 方法 1:執行期設定(建議放在 Bootstrap 或腳本最前面)
ini_set('gd.jpeg_ignore_warning', true);
// 方法 2:php.ini 永久生效
; gd.jpeg_ignore_warning = On
?>
<?php
ini_set('gd.jpeg_ignore_warning', true);
$src = imagecreatefromjpeg('problematic.jpg'); // 不再拋出警告
if ($src) {
$thumb = imagescale($src, 200);
imagejpeg($thumb, 'thumb.jpg');
imagedestroy($src);
imagedestroy($thumb);
}
?>
gd.jpeg_ignore_warning 為 PHP 5.1.3+ 內建選項,對應 libjpeg 的 jpeg_catch_warning 機制。false,建議搭配 @ 抑制警告並檢查回傳值。