0

我正在尝试使用 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吗?

我已经检查过了,config/mimes.php但一切似乎都是正确且有序的。任何帮助表示赞赏。提前致谢!

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

4

1 回答 1

0

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

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

于 2013-10-13T05:39:58.107 回答