2011-07-27 40 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上传的验证,所以它应该可以正常工作。

相关问题