使用 CodeIgniter Upload 類庫上傳 JPG/PNG 圖片時,若 MIME 偵測為 application/octet-stream 導致上傳失敗,主因是 PHP 缺少 fileinfo 擴展,無法正確識別檔案類型。
編輯 php.ini,取消註釋:
extension=php_fileinfo.dll
; php.ini
extension=fileinfo.so
或透過套件管理器安裝:
# CentOS/RHEL
yum install php-fileinfo -y
# 或 pecl 安裝
pecl install fileinfo
# Ubuntu/Debian
apt-get install php-fileinfo -y
# Alpine
apk add php-fileinfo
修改後必須重啟 PHP-FPM / Apache 生效。
finfo_open()),為官方推薦的 MIME 偵測方式_file_mime_type(),優先使用 finfo_file(),缺失則回退 mime_content_type() (已棄用) 或擴展名猜測application/octet-stream<?php
// 測試腳本
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo, 'test.jpg'); // 應輸出 image/jpeg
finfo_close($finfo);
?>
或在 phpinfo() 中搜尋 fileinfo support => enabled。
PHP 5.2 需安裝 PECL 擴展:
pecl install Fileinfo
# 編譯需 libmagic 支援
yum install file-devel -y
強烈建議升級至 PHP 7.4+,獲得原生效能與安全性更新。