PHP實現獲取文件mime類型多種方法解析

 更新時間:2020-06-14 00:02:52   作者:佚名   我要評論(0)

本文實例講述了php獲取文件mime類型的方法。分享給大家供大家參考。具體如下:
1.使用 mime_content_type 方法
string mime_content_type ( string $filename )

本文實例講述了php獲取文件mime類型的方法。分享給大家供大家參考。具體如下:

1.使用 mime_content_type 方法

string mime_content_type ( string $filename )

Returns the MIME content type for a file as determined by using information from the magic.mime file.

<?php 
$mime_type = mime_content_type('1.jpg'); 
echo $mime_type; // image/jpeg 
?>

但此方法在 php5.3 以上就被廢棄了,官方建議使用 fileinfo 方法代替。

2.使用 Fileinfo 方法 (官方推薦)

使用fileinfo需要安裝php_fileinfo擴展。

如已安裝可以在extension_dir目錄下找到php_fileinfo.dll(windows),fileinfo.so(linux)

打開php.ini,把extension=php_fileinfo.dll前的";"去掉,然后重啟apache。

<?php 
$fi = new finfo(FILEINFO_MIME_TYPE); 
$mime_type = $fi->file('1.jpg'); 
echo $mime_type; // image/jpeg 
?>

3.使用 image_type_to_mime_type 方法(只能處理圖象類型)

使用exif_imagetype方法需要安裝php_exif擴展,并需要安裝php_mbstring擴展

如已安裝可以在extension_dir目錄下找到php_exif.dll(windows),exif.so(linux)

打開php.ini,把 extension=php_mbstring.dll, extension=php_exif.dll 前的","去掉,然后重啟apache

<?php 
$image = exif_imagetype('1.jpg'); 
$mime_type = image_type_to_mime_type($image); 
echo $mime_type; // image/jpeg 
?>

Tips:如果使用文件名的后綴來判斷,因為文件后綴是可以修改的,所以使用文件后綴來判斷會不準確。

php獲取文件mime類型Fileinfo等方法

前幾天寫到使用wordpress xmlrpc api遠程發布文章,如果本地服務器的文章庫里某一篇待發表的wordpress文章包含圖片文件時,就會使用到WordPress上傳文件的API metaWeblog.newMediaObject,該api需要提供文件的mime 類型。php如 何獲取文件(圖片)的mime 類型呢?最初遠方博客使用php mime_content_type()函數,使用開發用的ubuntu server lamp的默認配置測試后完全支持,返回了正確的文件mime type。但是將該API項目移植到Centos 5.2(內核2.6) LAMP環境時,出現了如下錯誤提示:

Fatal error: Call to undefined function: mime_content_type()

最后查看了最新的php手冊發現php mime_content_type()函數已經被廢棄,當然官方不推薦使用,而且需要經過適當的php配置后才能使用。因此要獲取圖片或其他的文件的 MIME類型,Fatal error: Call to undefined function: mime_content_type()錯誤就有了以下幾種解決方案。

mime_content_type()函數判斷獲取mime類型

如果對已被php 5.3.0廢棄的mime_content_type()函數仍然情有獨鐘,那么可以對php進行配置啟用magic_mime擴展。比如Centos下 使用phpinfo()查看php apache配置,查找到mime-magic,如果顯示“--without-mime-magic”,則要編譯php切換到”with-mime- magic“選 項。mime_content_type()函數還依賴于Apache httpd 的magic文件(mime_magic.magicfile),為了檢測文件的MIME類型,必須配置告知magic文件的地址,如'–with- mime-magic=/usr/share/file/magic.mime'。Windows環境下還需要在php.ini中添加:

mime_magic.magicfile = "$PHP_INSTALL_DIRmagic.mime"

其中$PHP_INSTALL_DIR是你的php安裝目錄。在有些LAMP環境下,這個mime_magic文件不一定存在或可讀,還要另外下載。另外 有些虛擬主機為了安全考慮,即使是有with-mime-magic也不一定會返回正確的mime類型,有時候會返回空字符串。因此,就憑 mime_content_type()函數已經被廢棄這一項,就不推薦使用該方法獲取文件MIME類型了。

php Fileinfo 獲取文件MIME類型(finfo_open)

PHP官方推薦mime_content_type()的替代函數是Fileinfo函數。PHP 5.3.0+已經默認支持Fileinfo函數(fileinfo support-enabled),不必進行任何配置即可使用finfo_open()判斷獲取文件MIME類型。Centos 默認安裝的LAMP環境php版本還是PHP5.2.6,低于5.3.0版本則可能出現類似錯誤提示:PHP Fatal error: Call to undefined function finfo_open() in…。因為之前的php版本,需要加載magic_open類,fileinfo函數屬于PECL擴展,啟用fileinfo PECL擴展才能檢測MIME類型。所以有兩種途徑使用fileinfo獲取文件的MIME類型。

將php版本升級到5.3.0以上。php官方也已經不再維護和更新這個fileinfo pecl擴展包,所以升級是最好的辦法。

安裝fileinfo pecl擴展,Centos linux 如何安裝fileinfo:在Centos下面安裝fileinfo命令(rpm):yum install php-pecl-Fileinfo。或使用源碼安裝編譯:

cd /usr/src/down && wget http://pecl.php.net/get/Fileinfo-1.0.4.tgz
tar zxvf Fileinfo-1.0.4.tgz
cd /usr/src/down/Fileinfo-1.0.4 && phpize && ./configure && make && make install

還可以使用網上流傳較多的一種方法,Linux通過phpize使用pecl指令來安裝fileinfo:

  • 若沒有phpize指令,需要先安裝。#phpize檢測若提示”No command ‘phpize' found”,則需先安裝phpize;
  • 下載安裝php-devel(php5-dev)的rpm,安裝phpize;
  • service httpd restart 或 reboot;
  • 命令 pecl install fileinfo 安裝fileinfo擴展。
  • 安裝完畢,/usr/lib/php/module目錄下多了fileinfo.so文件,/usr/share/file目錄下多了magic.mime和magic兩個文檔
  • 修改php.ini配置:加入 extension=”fileinfo.so”
  • service httpd restart
  • Windows服務器下安裝fileinfo相似,php.ini:extension=php_fileinfo.dll

image_type_to_mime_type()獲取圖片MIME類型

如果我們需要判斷MIME類型的文件只有圖像文件,那么首先可以使用exif_imagetype()函數獲取圖像類型常量,再用 image_type_to_mime_type()函數將圖像類型常量轉換成圖片文件的MIME類型。同樣php.ini中要配置打開 php_mbstring.dll(Windows需要)和extension=php_exif.dll。phpinfo()“–enable-exif”。首先exif_imagetype返回的是圖像類型常量(Imagetype Constants),如IMAGETYPE_GIF、IMAGETYPE_JPEG、IMAGETYPE_PNG等。

<?php 
$image = exif_imagetype("D:farleeinfo.jpg");  //本地路徑或遠程圖片地址均可 IMAGETYPE_GIF// 
$image = exif_imagetype("http://farlee.info/wp-content/images/rss_feedsky.gif"); 
$mime = image_type_to_mime_type($image); 
echo $mime; // 輸出image/jpeg 
?>

php上傳文件獲取MIME類型

如果使用php上傳文件,檢測上傳文件的MIME類型,則可以使用全局變量$_FILES['uploadfile']['type'],由客戶端的瀏覽器檢測獲取文件MIME類型。

Centos 系統或其他環境下若都不方便獲取文件MIME類型的話,還有最后一種絕對可行的方法,就是讀取文件名后綴,根據后綴名一一對應文件的MIME類型,具體可以參考php手冊上的這條評論。當然這種方法檢測到的MIME文件類型不一定是非常準確的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

  • PHP實現的獲取文件mimes類型工具類示例
  • php文件類型MIME對照表(比較全)
  • php準確獲取文件MIME類型的方法
  • php實現獲取文件mime類型的方法
  • PHP 利用Mail_MimeDecode類提取郵件信息示例
  • PHP的反射動態獲取類方法、屬性、參數操作示例
  • php 比較獲取兩個數組相同和不同元素的例子(交集和差集)
  • PHP實現獲取url地址中頂級域名的方法示例

相關文章

  • PHP實現獲取文件mime類型多種方法解析

    PHP實現獲取文件mime類型多種方法解析

    本文實例講述了php獲取文件mime類型的方法。分享給大家供大家參考。具體如下: 1.使用 mime_content_type 方法 string mime_content_type ( string $filename )
    2020-06-14
  • PHP const定義常量及global定義全局常量實例解析

    PHP const定義常量及global定義全局常量實例解析

    const 常量 1.在定義時必須被初始值, 2.前面不加任何修飾符 3.變量名字母一般都大寫 4.常量可以被子類繼承 5.一個常量是屬于一個類的,而不是某個對
    2020-06-14
  • php生成短網址/短鏈接原理和用法實例分析

    php生成短網址/短鏈接原理和用法實例分析

    本文實例講述了php生成短網址/短鏈接原理和用法。分享給大家供大家參考,具體如下: 需求 在我們的項目當中,如果需要更好傳播我們的活動鏈接,但是鏈接太長1來是不
    2020-06-14
  • php實現的證件照換底色功能示例【人像摳圖/換背景圖】

    php實現的證件照換底色功能示例【人像摳圖/換背景圖】

    本文實例講述了php實現的證件照換底色功能。分享給大家供大家參考,具體如下: <&#63;php //背景圖和原圖需要保持寬高要保持一樣,這里的示例原圖用的是藍色背景
    2020-06-14
  • PHP實現本地圖片轉base64格式并上傳

    PHP實現本地圖片轉base64格式并上傳

    我們在開發系統時,處理圖片上傳是不可避免的,例如使用thinkphp的肯定很熟悉import("@.ORG.UploadFile");的上傳方式,今天我們來講一個使用html5 base64上傳圖片的
    2020-06-14
  • php使用自帶dom擴展進行元素匹配的原理解析

    php使用自帶dom擴展進行元素匹配的原理解析

    DOMDocument php提供了非常好用的解析html和xml文檔的擴展庫DOM,使用這個庫可以非常高效的進行html和xml文檔的解析,它的原理就是通過尋找首尾匹配對來進行文檔的解
    2020-06-14
  • PHP實現圖片防盜鏈破解操作示例【解決圖片防盜鏈問題/反向代理】

    PHP實現圖片防盜鏈破解操作示例【解決圖片防盜鏈問題/反向代理】

    本文實例講述了PHP實現圖片防盜鏈破解操作。分享給大家供大家參考,具體如下: 很多小伙伴的博客,網站都是用圖床來實現的,那么現在很多穩定的圖床接口都被做了防盜
    2020-06-14
  • PHP論壇實現積分系統的思路代碼詳解

    PHP論壇實現積分系統的思路代碼詳解

    首先在用戶表定義一個積分字段; 然后創建一個等級表,主要字段有等級名,上限積分和下限積分; 再根據用戶的行為進行積分累加; 最后根據判斷用戶積分在哪個等級范
    2020-06-14
  • PHP Web表單生成器案例分析

    PHP Web表單生成器案例分析

    本文實例講述了PHP Web表單生成器。分享給大家供大家參考,具體如下: 1.實例: 2. 需求分析 在項目的實際開發中,經常需要設計各種各樣表單。直接編寫HTML表單雖然
    2020-06-14
  • 一文看懂PHP進程管理器php-fpm

    一文看懂PHP進程管理器php-fpm

    php-fpm是什么 php-fpm是PHP的一個進程管理器。php下面的眾多work進程皆有php-fpm進程管理器管理。 php-fpm的工作原理 php-fpm全名是PHP FastCGI進程管理器。php
    2020-06-14

最新評論

买宝宝用品赚钱吗 全国前10正规配资公司 今天山西快乐十分走势图 吉林11选5走势图同步 配资账户炒股 湖南快乐十分任四遗漏统计 手机赌博会坐牢吗 陕西11选5电子走势图 彩票榜cpbapp官网 好股票配资平台 江西老11选五开奖结果 甘肃十一选五智能推荐号 北京28是福彩中心的吗 两个骰子玩法 宁夏11选五走势图一定牛 11选5开奖结果走势图 股票分析师为什么会免费推荐股票