MIME、八位字节流和 Uploadify

问题描述 投票:0回答:1

我正在使用 UploadifyKohana,我正在创建文件上传器。用户只能上传几种类型的文件。

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'], '.'), '.')

php file-upload kohana mime uploadify
1个回答
3
投票

PHP 可以使用 fileinfoMIME Magic(已从 PHP 5.3.0 中删除)来确定文件的 MIME 类型(Kohanas 的

File::mime()
方法也是如此)。

如果这 2 个都不可用,此方法将尝试使用文件扩展名查找 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 上传的验证,因此它应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.