您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)怎么在PHP中獲取文件的mime類型,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
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擴(kuò)展。
如已安裝可以在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擴(kuò)展,并需要安裝php_mbstring擴(kuò)展
如已安裝可以在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:如果使用文件名的后綴來判斷,因?yàn)槲募缶Y是可以修改的,所以使用文件后綴來判斷會(huì)不準(zhǔn)確。
php獲取文件mime類型Fileinfo等方法
前幾天寫到使用wordpress xmlrpc api遠(yuǎn)程發(fā)布文章,如果本地服務(wù)器的文章庫里某一篇待發(fā)表的wordpress文章包含圖片文件時(shí),就會(huì)使用到WordPress上傳文件的API metaWeblog.newMediaObject,該api需要提供文件的mime 類型。php如 何獲取文件(圖片)的mime 類型呢?最初遠(yuǎn)方博客使用php mime_content_type()函數(shù),使用開發(fā)用的ubuntu server lamp的默認(rèn)配置測(cè)試后完全支持,返回了正確的文件mime type。但是將該API項(xiàng)目移植到Centos 5.2(內(nèi)核2.6) LAMP環(huán)境時(shí),出現(xiàn)了如下錯(cuò)誤提示:
Fatal error: Call to undefined function: mime_content_type()
最后查看了最新的php手冊(cè)發(fā)現(xiàn)php mime_content_type()函數(shù)已經(jīng)被廢棄,當(dāng)然官方不推薦使用,而且需要經(jīng)過適當(dāng)?shù)膒hp配置后才能使用。因此要獲取圖片或其他的文件的 MIME類型,F(xiàn)atal error: Call to undefined function: mime_content_type()錯(cuò)誤就有了以下幾種解決方案。
mime_content_type()函數(shù)判斷獲取mime類型
如果對(duì)已被php 5.3.0廢棄的mime_content_type()函數(shù)仍然情有獨(dú)鐘,那么可以對(duì)php進(jìn)行配置啟用magic_mime擴(kuò)展。比如Centos下 使用phpinfo()查看php apache配置,查找到mime-magic,如果顯示“--without-mime-magic”,則要編譯php切換到”with-mime- magic“選 項(xiàng)。mime_content_type()函數(shù)還依賴于Apache httpd 的magic文件(mime_magic.magicfile),為了檢測(cè)文件的MIME類型,必須配置告知magic文件的地址,如'–with- mime-magic=/usr/share/file/magic.mime'。Windows環(huán)境下還需要在php.ini中添加:
mime_magic.magicfile = "$PHP_INSTALL_DIRmagic.mime"
其中$PHP_INSTALL_DIR是你的php安裝目錄。在有些LAMP環(huán)境下,這個(gè)mime_magic文件不一定存在或可讀,還要另外下載。另外 有些虛擬主機(jī)為了安全考慮,即使是有with-mime-magic也不一定會(huì)返回正確的mime類型,有時(shí)候會(huì)返回空字符串。因此,就憑 mime_content_type()函數(shù)已經(jīng)被廢棄這一項(xiàng),就不推薦使用該方法獲取文件MIME類型了。
php Fileinfo 獲取文件MIME類型(finfo_open)
PHP官方推薦mime_content_type()的替代函數(shù)是Fileinfo函數(shù)。PHP 5.3.0+已經(jīng)默認(rèn)支持Fileinfo函數(shù)(fileinfo support-enabled),不必進(jìn)行任何配置即可使用finfo_open()判斷獲取文件MIME類型。Centos 默認(rèn)安裝的LAMP環(huán)境php版本還是PHP5.2.6,低于5.3.0版本則可能出現(xiàn)類似錯(cuò)誤提示:PHP Fatal error: Call to undefined function finfo_open() in…。因?yàn)橹暗膒hp版本,需要加載magic_open類,fileinfo函數(shù)屬于PECL擴(kuò)展,啟用fileinfo PECL擴(kuò)展才能檢測(cè)MIME類型。所以有兩種途徑使用fileinfo獲取文件的MIME類型。
將php版本升級(jí)到5.3.0以上。php官方也已經(jīng)不再維護(hù)和更新這個(gè)fileinfo pecl擴(kuò)展包,所以升級(jí)是最好的辦法。
安裝fileinfo pecl擴(kuò)展,Centos linux 如何安裝fileinfo:在Centos下面安裝fileinfo命令(rpm):yum install php-pecl-Fileinfo?;蚴褂迷创a安裝編譯:
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
還可以使用網(wǎng)上流傳較多的一種方法,Linux通過phpize使用pecl指令來安裝fileinfo:
若沒有phpize指令,需要先安裝。#phpize檢測(cè)若提示”No command ‘phpize' found”,則需先安裝phpize;
下載安裝php-devel(php5-dev)的rpm,安裝phpize;
service httpd restart 或 reboot;
命令 pecl install fileinfo 安裝fileinfo擴(kuò)展。
安裝完畢,/usr/lib/php/module目錄下多了fileinfo.so文件,/usr/share/file目錄下多了magic.mime和magic兩個(gè)文檔
修改php.ini配置:加入 extension=”fileinfo.so”
service httpd restart
Windows服務(wù)器下安裝fileinfo相似,php.ini:extension=php_fileinfo.dll
image_type_to_mime_type()獲取圖片MIME類型
如果我們需要判斷MIME類型的文件只有圖像文件,那么首先可以使用exif_imagetype()函數(shù)獲取圖像類型常量,再用 image_type_to_mime_type()函數(shù)將圖像類型常量轉(zhuǎn)換成圖片文件的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"); //本地路徑或遠(yuǎn)程圖片地址均可 IMAGETYPE_GIF// $image = exif_imagetype("https://cache.yisu.com/upload/information/20201209/266/34905.gif"); $mime = image_type_to_mime_type($image); echo $mime; // 輸出image/jpeg ?>
php上傳文件獲取MIME類型
如果使用php上傳文件,檢測(cè)上傳文件的MIME類型,則可以使用全局變量$_FILES['uploadfile']['type'],由客戶端的瀏覽器檢測(cè)獲取文件MIME類型。
Centos 系統(tǒng)或其他環(huán)境下若都不方便獲取文件MIME類型的話,還有最后一種絕對(duì)可行的方法,就是讀取文件名后綴,根據(jù)后綴名一一對(duì)應(yīng)文件的MIME類型,具體可以參考php手冊(cè)上的這條評(píng)論。當(dāng)然這種方法檢測(cè)到的MIME文件類型不一定是非常準(zhǔn)確的。
關(guān)于怎么在PHP中獲取文件的mime類型就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。