2011-07-27 73 views
0

我使用UploadifyKohana,我正在創建文件上傳器。用戶只能上傳幾種類型的文件。MIME,八位字節流和Uploadify

Kohana有很多內置的MIME類型庫。我認爲,檢查MIME類型的上傳文件(它來自Uploadify)與設置的文件擴展名匹配會很酷。這就是爲什麼我製作了一系列允許的MIME類型。

$mimes   = (array) Kohana::config('mimes'); 
$allowed_mimes = array_merge($mimes['bmp'], $mimes['gif'], $mimes['jpg'], $mimes['jpeg'], $mimes['png']); 

接下來,我想檢查上傳的文件的MIME類型是$allowed_mimes陣列。我使用了類似in_array($file['type'], $allowed_mimes)的東西。讓我意外的是 - 文件的實際MIME是application/octet-stream。無論如何,上傳的文件是JPEG圖像。這怎麼可能?

基本思路是我需要檢查文件類型。什麼是最好的方式來做到這一點?

編輯:

一些轉換與我的同事後,我決定最後一個點後檢查字符。像virus.jpeg是可以接受的,因爲jpeg就是它的名字。我仍然開放更好的解決方案!

$extension = ltrim(strrchr($file['name'], '.'), '.')

+0

'$ ext = pathinfo($ filename,PATHINFO_EXTENSION);'會得到擴展名的正確方法(我無法理解原始問題?) – Kemo

+0

問題是:如何檢查文件類型? MIME好嗎? 'application/octet-stream'到底是什麼,以及我如何獲得'JPEG'?我的解決方案(請參閱編輯)好嗎? – daGrevis

回答

3

PHP可以使用fileinfoMIME Magic(已從PHP 5.3.0移除)來確定文件的MIME類型(也是如此Kohanas' File::mime()方法)。

如果這兩個都不可用,則此方法將嘗試使用文件的擴展名來查找MIME類型,該擴展名可能非常不可靠。

由於您只試圖驗證一些上傳,我建議使用Upload方法來驗證它:

$validation = Validation::factory($_FILES) 
    ->rule('Filedata', 'Upload::not_empty') 
    ->rule('Filedata', 'Upload::valid') 
    ->rule('Filedata', 'Upload::size', array(':value', '4M')) 
    ->rule('Filedata', 'Upload::type', array(':value', array('bmp','jpg','jpeg','png'))) 
    ->rule('Filedata', 'Upload::image', array(':value', 1920, 1080)); 

注意Upload::image()可用,因爲3.2.0(你可以將其導入到舊版本的好)。這是我個人用於Uploadify上傳的驗證,所以它應該可以正常工作。

相關問題