我正在尝试使用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的修复程序不相关,因为这在当前版本中被认为是“固定的”。
答案 0 :(得分:0)
在对这个问题做了大量研究而没有找到任何答案之后,我自己调试了这个情况;完全。原来返回错误的MIME类型实际上是正确的;我在假设。原始图像文件是作为PNG创建的,但在其他地方不正确地重新创建。使用PHP:FINFO:函数检查真正的file_type反对签名等,这就是为什么它返回PNG而不是JPG。我假设这有助于防止人们创建虚假的图像文件并将其上传到服务器,因为$ _FILES [filename] [file_type]并不完全准确。这有助于防止他们创建一个包含内部代码的.php文件,并将该文件重命名并上传为.jpg。
希望这一切都有意义并帮助那些认为自己有类似问题的人。