Codeigniter上传类MIME问题

时间:2013-10-13 03:25:56

标签: php image codeigniter upload

我正在尝试使用CodeIgniter上传类上传图片。这种情况一直持续到几天前,当时我注意到只上传某些图像会导致问题。目前我正在使用名为“image.jpg”的图像测试该问题。根据文件扩展名,图像是JPG图像,应该返回mime类型的“image / jpeg”。但是,出于某种原因,在上传此图像时,错误会返回状态。

  

“不允许您尝试上传的文件类型。”

我的配置相当简单,允许使用一些不同的图像类型,包括JPG。

    $config = array(
        'allowed_types' => 'jpg|jpeg|gif|png',
        'file_name'     => $full,
        'upload_path'   => $path,
        'max_size'      => 5120
    );

这里真正的踢球者是当我回复$this->upload->data()时返回:

    Array
    (
        [file_name] => image.jpg
        [file_type] => image/png
        [file_path] => /var/www/tmp/
        [full_path] => /var/www/tmp/image.jpg
        [raw_name] => image
        [orig_name] => 
        [client_name] => image.jpg
        [file_ext] => .jpg
        [file_size] => 50519
        [is_image] => 1
        [image_width] => 
        [image_height] => 
        [image_type] => 
        [image_size_str] => 
    )

当图片应该返回image/png时,有人知道图片返回image/jpeg的file_type的原因吗?

我已经检查了config/mimes.php,但所有内容似乎都是正确无误的。任何帮助表示赞赏。提前谢谢!

如果我将允许的类型设置为:allowed_types => '*'它似乎可以工作,但我不想允许所有文件类型。这是CodeIgniter 2.0之前的一个问题。我目前运行的版本是2.1.3,因此2.0的修复程序不相关,因为这在当前版本中被认为是“固定的”。

1 个答案:

答案 0 :(得分:0)

在对这个问题做了大量研究而没有找到任何答案之后,我自己调试了这个情况;完全。原来返回错误的MIME类型实际上是正确的;我在假设。原始图像文件是作为PNG创建的,但在其他地方不正确地重新创建。使用PHP:FINFO:函数检查真正的file_type反对签名等,这就是为什么它返回PNG而不是JPG。我假设这有助于防止人们创建虚假的图像文件并将其上传到服务器,因为$ _FILES [filename] [file_type]并不完全准确。这有助于防止他们创建一个包含内部代码的.php文件,并将该文件重命名并上传为.jpg。

希望这一切都有意义并帮助那些认为自己有类似问题的人。