首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测上传的文件是否不是图像?

如何检测上传的文件是否不是图像?
EN

Stack Overflow用户
提问于 2017-01-05 13:00:50
回答 2查看 1.4K关注 0票数 0

如何检查上传的文件是否仅为是图像而不是视频文件等等?

我测试了一个简单的代码,它将检查上传的文件是否是图像。

表单

代码语言:javascript
复制
<form method="post" enctype="multipart/form-data">
    <input type="file" name="photo" accept="image/*">
    <input type="submit" name="submit" value="Test">
</form>

虽然我有accept="image/*",但我可以轻松地将它更改为All types并获得一个非映像文件。

代码以检查该文件是否为有效的图像(这仅用于测试)

代码语言:javascript
复制
if($_POST['submit']) {
    $tmp_file = $_FILES['photo']['tmp_name'];
    if(mime_content_type($tmp_file)) {
        var_dump(mime_content_type($tmp_file));
    } else {
        echo 'error1';
    }
    if(getimagesize($tmp_file)) {
        var_dump(getimagesize($tmp_file));
    } else {
        echo 'error2';
    }
}

到目前为止,我已经对此进行了3次测试,其中2次通过1次失败:

  1. 测试图像=传递。
  2. 测试非映像有效的.srt文件=传递(给getimagesize一个错误)
  3. 测试有效的视频文件.mp4 =失败(提交后,它将加载5-10秒,不会出现任何错误)

我该怎么办?我不知道问题是什么,因为它没有给出来自var_dump()echo 'errors'的任何结果。我现在确实认为PHP正在接受该文件。

Note

我需要这样做,以便只有一个有效的图像将被上传。

Note 2

关于这个有标记的问题的公认的答案不是和我一起工作。

更新

如果我试图上传一个小于128米的视频,它会返回一些内容。但是如果它大于1.28m,它在我的localhost中什么也得不到,但是我在一个生产站点上测试了它,它给了我一个REQUEST TIME OUT

EN

回答 2

Stack Overflow用户

发布于 2017-01-05 13:04:06

找到像这样的文件扩展名并检查有效类型..。

代码语言:javascript
复制
function  getextension($name){
    $count=substr_count($name,".");
    if($count>1){//some cases have two dotes
        $name= preg_replace('/\.(?=.*\.)/', '_', $name);
    }
    list($txt, $ext) = explode(".", $name);
    return $ext;
}

$name = $_FILES['imageupload']['name'];//Name of the File
$image_extension = getextension($name);

 $allowed_extension = array("jpg", "png", "gif", "bmp", "jpeg","JPG","PNG","GIF","BMP","JPEG");
 $image_extension=getextension($name);
  if (!in_array($image_extension, $allowed_extension)) {
    $error_flag = 1;
    $message = "Invalid File Format";
 }
票数 1
EN

Stack Overflow用户

发布于 2017-01-05 13:09:20

根据问题点,解析和检查扩展是不够的。

我建议在加载文件后检查文件EXIF (可互换图像信息)数据。

您可以在扩展的基础上进行基本验证,如果成功,检查图像的exif数据。

为此,您将需要一个单独的DLL来加载,这将具有exif相关的功能。

http://php.net/manual/en/ref.exif.php

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41485804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档