PHP使用finfo_file()函數(shù)檢測(cè)上傳圖片類(lèi)型的實(shí)現(xiàn)方法
本文實(shí)例講述了PHP使用finfo_file()函數(shù)檢測(cè)上傳圖片類(lèi)型的實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
在輸入輸出中,文件的交互必不可少,比如文件的上傳什么的。這里我們來(lái)解決一個(gè)小問(wèn)題,就是如何判斷用戶(hù)上傳文件的文件類(lèi)型。
舉一個(gè)應(yīng)用場(chǎng)面:在我們的Web應(yīng)用中,比如用戶(hù)上傳頭像,要求是png,jpg,gif格式,接收到圖片后會(huì)根據(jù)圖片格式類(lèi)型做不同的頭像切割處理,但個(gè)別用戶(hù)會(huì)傳一些只更改過(guò)文件后綴的非標(biāo)準(zhǔn)圖片,比如nowamagic.jpg 強(qiáng)行修改成 nowamagic.png,這樣程序無(wú)法對(duì)該類(lèi)型圖片進(jìn)行切割,切割失敗。這個(gè)時(shí)候就需要對(duì)文件進(jìn)行檢測(cè),并且僅僅根據(jù)后綴來(lái)判斷是不行的。
這種這么常見(jiàn)的需求,PHP肯定自帶了某些函數(shù)來(lái)實(shí)現(xiàn)的,這個(gè)函數(shù)就是 finfo_file
。
finfo_file
(PHP >= 5.3.0, PECL fileinfo >= 0.1.0)
finfo_file -- finfo::file — Return information about a file,This function is used to get information about a file.
函數(shù)很簡(jiǎn)單,看看官方文檔就大概清楚了,這里就舉一個(gè)使用例子吧,就是上傳一張圖片,并判斷它的類(lèi)型:
<html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <head> <title>文件上傳</title> </head> <body> <form accept="" method="post" enctype="multipart/form-data"> <input type="file" name="img[]" /><br /> <input type="submit" name="s" /><br /> </form> <?php //上傳文件信息 $img = $_FILES['img']; if ($img) { //文件存放目錄,和本php文件同級(jí) $dir = dirname(__file__); $filename = $img['name'][0]; $tempname = $img['tmp_name'][0]; $savepath = "$dir\\$filename"; $state = move_uploaded_file($tempname, $savepath); //如果上傳成功,預(yù)覽 if($state) { echo "<img src='$filename' alt='$filename' /> "; } $finfo = finfo_open(FILEINFO_MIME_TYPE); //$mime = finfo_file($finfo, dirname(__FILE__)."/".$filename); $mime = finfo_file($finfo, $savepath); echo $mime; } ?> </body> </html>
需要注意的是,finfo_file 函數(shù)需要 PHP 版本 >= 5.3.0,如果低于 5.3,那么需要到 php.ini 里,將 extension=php_fileinfo.dll 前面的分號(hào)去掉來(lái)啟用。
當(dāng)然,檢測(cè)文件類(lèi)型的方式很多種,后面我們會(huì)慢慢講到。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php文件操作總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- php實(shí)現(xiàn)不通過(guò)擴(kuò)展名準(zhǔn)確判斷文件類(lèi)型的方法【finfo_file方法與二進(jìn)制流】
- php通過(guò)獲取頭信息判斷圖片類(lèi)型的方法
- php圖片處理函數(shù)獲取類(lèi)型及擴(kuò)展名實(shí)例
- PHP檢測(cè)數(shù)據(jù)類(lèi)型的幾種方法(總結(jié))
- 利用PHP實(shí)現(xiàn)智能文件類(lèi)型檢測(cè)的實(shí)現(xiàn)代碼
- php通過(guò)文件頭檢測(cè)文件類(lèi)型通用代碼類(lèi)(zip,rar等)
- PHP判斷上傳文件類(lèi)型的解決辦法
- php判斷文件上傳類(lèi)型及過(guò)濾不安全數(shù)據(jù)的方法
- php 讀取文件頭判斷文件類(lèi)型的實(shí)現(xiàn)代碼
- PHP取二進(jìn)制文件頭快速判斷文件類(lèi)型的實(shí)現(xiàn)代碼
- php 上傳文件類(lèi)型判斷函數(shù)(避免上傳漏洞 )
- php 網(wǎng)頁(yè)播放器用來(lái)播放在線視頻的代碼(自動(dòng)判斷并選擇視頻文件類(lèi)型)
- PHP 文件類(lèi)型判斷代碼
相關(guān)文章
PHP中比較兩個(gè)對(duì)象的幾種方式小結(jié)
在PHP中,比較兩個(gè)對(duì)象并不是一件直接明了的事情,因?yàn)閷?duì)象之間的比較通常依賴(lài)于它們的屬性和狀態(tài),而這些屬性和狀態(tài)可能非常復(fù)雜且多樣化,本文給大家總結(jié)了PHP中比較兩個(gè)對(duì)象的幾種方式,需要的朋友可以參考下2024-09-09Ajax PHP 邊學(xué)邊練 之三 數(shù)據(jù)庫(kù)
在上一篇備忘日歷實(shí)例中,實(shí)現(xiàn)了當(dāng)鼠標(biāo)放在某個(gè)日期上時(shí),如果當(dāng)天有備忘信息則會(huì)顯示出來(lái),但是這些信息是為了測(cè)試方便事先寫(xiě)在數(shù)組中的數(shù)據(jù),不能體現(xiàn)其實(shí)時(shí)性。2009-11-11PHP遞歸復(fù)制、移動(dòng)目錄的自定義函數(shù)分享
這篇文章主要介紹了PHP遞歸復(fù)制、移動(dòng)目錄的自定義函數(shù)分享,本文的特點(diǎn)是對(duì)每一句代碼都做詳盡的注釋,需要的朋友可以參考下2014-11-11深入PHP empty(),isset(),is_null()的實(shí)例測(cè)試詳解
本篇文章是對(duì)PHP empty(),isset(),is_null()的實(shí)例測(cè)試進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP實(shí)現(xiàn)對(duì)二維數(shù)組某個(gè)鍵排序的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)對(duì)二維數(shù)組某個(gè)鍵排序的方法,涉及php針對(duì)數(shù)組的遍歷、比較、排序等相關(guān)操作技巧,需要的朋友可以參考下2016-09-09