如何在PHP中检查上传的文件类型?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (109)

我用这段代码来检查图像的类型:

$f_type=$_FILES['fupload']['type'];

if ($f_type== "image/gif" OR $f_type== "image/png" OR $f_type== "image/jpeg" OR $f_type== "image/JPEG" OR $f_type== "image/PNG" OR $f_type== "image/GIF")
{
    $error=False;
}
else
{
    $error=True;
}

但有些用户抱怨他们在上传任何类型的图片时出错,而其他一些用户则没有收到任何错误。

我想知道这是否解决了这个问题:

if (mime_content_type($_FILES['fupload']['type']) == "image/gif"){...

提问于
用户回答回答于

不要用$_FILES..['type']。其中包含的信息根本未经过验证,它是用户定义的值。自己测试类型。对于图像,exif_imagetype通常是一个不错的选择:

$allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF);
$detectedType = exif_imagetype($_FILES['fupload']['tmp_name']);
$error = !in_array($detectedType, $allowedTypes);
用户回答回答于

这是一个我经常使用的简单的单行脚本:

$image = "/var/www/Core/temp/image.jpg";
$isImage = explode("/", mime_content_type())[0] == "image";

基本上我使用mime_content_type()来获取类似“image / jpg”的东西,然后通过“/”对其进行爆炸,并检查数组的第一个元素,看它是否显示“image”。

扫码关注云+社区

领取腾讯云代金券