2012-05-18 34 views
0

我正在嘗試使用finfo來確定文件是否在將圖像文件上傳到服務器之前。我的問題是,下面的代碼僅適用於jpeg,但我也有其他文件類型允許。所以,我有2個問題:如何使用finfo確定多個文件類型?

問題1:

如何使用FINFO檢查多個文件類型,如GIF,TIFF,PNG,ICO等

問題2:我是否需要使用其他驗證方法來檢查,看看是否是一個圖像或是我下面得到的是足夠的?

下面是代碼:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$mimetype = image_type_to_mime_type(exif_imagetype('/path/to/file.jpg')); 

if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg") 
|| ($_FILES["file"]["type"] == "image/tiff") 
|| ($_FILES["file"]["type"] == "image/png") 
|| ($_FILES["file"]["type"] == "image/bmp") 
|| ($_FILES["file"]["type"] == "image/ico") 

{ 

    if ($finfo !== FALSE){ 

    move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
    "ImageFiles/" . $_FILES["fileImage"]["name"]); 
    $result = 1; 

    @finfo_close($finfo); 
} 
} 
+0

你的代碼究竟有什麼問題?它不是正在檢查多種文件類型嗎? – Jeroen

回答

0

這應該檢查文件類型是否爲圖片:

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
$mimetype = finfo_file($finfo, '/path/to/file.jpg'; 
finfo_close($finfo); 

if (substr ($mimetype, 0, 5) == 'image') { 
    // its an image 
} 
else { 
    // its not an image! 
} 

第二種選擇,如果你使用PHP 5.2或更低:

$mimetype = mime_content_type('/path/to/file.jpg'; 

if (substr ($mimetype, 0, 5) == 'image') { 
    // its an image 
} 
else { 
    // its not an image! 
} 

至於其他驗證方法,您應該使用getimagesize()函數:http://php.net/manual/en/function.getimagesize.php

if (getimagesize ('/path/to/file.jpg')) { 
    // its an image 
} 
else { 
    // its not an image! 
} 

這樣,您的腳本就不能通過更改mime類型或文件的擴展名而被愚弄。

+0

我認爲finfo只是檢查一個jpg圖像,但finfo如何檢查它的gif,bmp,tiff等?我知道'$ _FILES [「file」] [「type」]'這樣做,但我想finfo做同樣的事情。與你提供給我的代碼一樣,是不是隻能檢查JPG?其他圖像類型呢? – user1394925

+0

什麼是您的PHP版本? FILEINFO_MIME_TYPE僅在PHP 5.3.0以上版本可用 – Jeroen

+0

您如何檢查以查看哪些版本的php正在使用,我只是簡單地使用了深紅色編輯器,它只是一個文本編輯器來編寫代碼 – user1394925