File upload 模拟、八位字节流和上传

File upload 模拟、八位字节流和上传,file-upload,kohana,mime,uploadify,file-type,File Upload,Kohana,Mime,Uploadify,File Type,我正在使用和创建文件上传程序。用户只能上载几种类型的文件 Kohana内置了大量MIME类型库。我认为检查上传文件的MIME类型(来自Uploadify)是否匹配设置的文件扩展名会很酷。这就是为什么我创建了一个允许MIME类型的数组 $mimes = (array) Kohana::config('mimes'); $allowed_mimes = array_merge($mimes['bmp'], $mimes['gif'], $mimes['jpg'], $mimes['j

我正在使用和创建文件上传程序。用户只能上载几种类型的文件

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\u mimes
数组中。我在数组($file['type'],$allowed\u mimes)中使用了类似于
的东西。
。令我惊讶的是,文件的实际MIME是
应用程序/octet流
。无论如何,上传的文件是
JPEG
image。这怎么可能

基本思想是我需要检查文件类型。最好的方法是什么

编辑:

在和同事们进行了一些转换之后,我决定在最后一点后检查字符。类似于
virus.jpeg
是可以接受的,因为
jpeg
在其名称中。我仍然对更好的解决方案持开放态度

$extension=ltrim(strrchr($file['name'],'.'),'..'))
PHP可以使用和(已从PHP5.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()。这是我个人在一些Uploadify上传中使用的验证,因此应该可以正常工作。

PHP可以使用and(已从PHP5.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()。这是我个人在一些Uploadify上传中使用的验证,所以它应该可以正常工作。

$ext=pathinfo($filename,pathinfo\u扩展名)将是获得扩展名的正确方法(我无法理解原始问题?)问题是:如何检查文件类型?默剧可以这样做吗?什么是
应用程序/octet流
,我是如何用
JPEG
获得它的?我的解决方案(请参见编辑)可以吗?
$ext=pathinfo($filename,pathinfo\u扩展名)将是获得扩展名的正确方法(我无法理解原始问题?)问题是:如何检查文件类型?默剧可以这样做吗?什么是
应用程序/octet流
,我是如何用
JPEG
获得它的?我的解决方案(请参见编辑)可以吗?