1. 使用finfo_file()函數檢測上傳圖片的類型
在輸入輸出中,文件的交互必不可少,比如文件的上傳什么的。這里我們來解決一個小問題,就是如何判斷用戶上傳文件的文件類型。
舉一個應用場面:在我們的Web應用中,比如用戶上傳頭像,要求是png,jpg,gif格式,接收到圖片后會根據圖片格式類型做不同的頭像切割處理,但個別用戶會傳一些只更改過文件后綴的非標準圖片,比如nowamagic.jpg 強行修改成 nowamagic.png,這樣程序無法對該類型圖片進行切割,切割失敗。這個時候就需要對文件進行檢測,并且僅僅根據后綴來判斷是不行的。
這種這么常見的需求,PHP肯定自帶了某些函數來實現的,這個函數就是 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.
函數很簡單,看看官方文檔就大概清楚了,這里就舉一個使用例子吧,就是上傳一張圖片,并判斷它的類型:
<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文件同級
$dir = dirname(__file__);
$filename = $img['name'][0];
$tempname = $img['tmp_name'][0];
$savepath = "$dir//$filename";
$state = move_uploaded_file($tempname, $savepath);
//如果上傳成功,預覽
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 函數需要 PHP 版本 >= 5.3.0,如果低于 5.3,那么需要到 php.ini 里,將 extension=php_fileinfo.dll 前面的分號去掉來啟用。
新聞熱點
疑難解答