首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

CodeIgniter 上傳圖片識別為 application/octet-stream 解決方案:啟用 fileinfo 擴展

     編輯:PHP 相關知識

CodeIgniter 上傳圖片識別為 application/octet-stream 解決方案

使用 CodeIgniter Upload 類庫上傳 JPG/PNG 圖片時,若 MIME 偵測為 application/octet-stream 導致上傳失敗,主因是 PHP 缺少 fileinfo 擴展,無法正確識別檔案類型。

解決方法:啟用 fileinfo 擴展

Windows 環境 (XAMPP / WAMP / 手動安裝)

編輯 php.ini,取消註釋:

extension=php_fileinfo.dll

Linux 環境 (CentOS / Ubuntu / Alpine)

; 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 生效。

原理說明

  • PHP 5.3+ 內建 Fileinfo 函數 (finfo_open()),為官方推薦的 MIME 偵測方式
  • CI Upload 類庫內部呼叫 _file_mime_type(),優先使用 finfo_file(),缺失則回退 mime_content_type() (已棄用) 或擴展名猜測
  • 無 fileinfo 時,二進制圖片常被誤判為 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。

補充:CentOS 5.x / PHP 5.2 舊環境

PHP 5.2 需安裝 PECL 擴展:

pecl install Fileinfo
# 編譯需 libmagic 支援
yum install file-devel -y

強烈建議升級至 PHP 7.4+,獲得原生效能與安全性更新。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved