【问题标题】:how to check whether file is image or video type in php version 5.2.9?如何在 php 5.2.9 版本中检查文件是图像还是视频类型?
【发布时间】:2011-03-05 17:01:36
【问题描述】:

php 5.2.9版本如何判断文件是图片还是视频类型

【问题讨论】:

标签: php


【解决方案1】:
$mime = mime_content_type($file);
if(strstr($mime, "video/")){
    // this code for video
}else if(strstr($mime, "image/")){
    // this code for image
}

应该适用于大多数文件扩展名。

【讨论】:

    【解决方案2】:

    看我的回答

    示例代码

     function getMimeType($filename)
     {
         $mimetype = false;
         if(function_exists('finfo_fopen')) {
             // open with FileInfo
         } elseif(function_exists('getimagesize')) {
             // open with GD
         } elseif(function_exists('exif_imagetype')) {
            // open with EXIF
         } elseif(function_exists('mime_content_type')) {
            $mimetype = mime_content_type($filename);
         }
         return $mimetype;
     }
    

    【讨论】:

    • 来自 getimagesize 文档:“不要使用 getimagesize() 来检查给定文件是否为有效图像。请改用专用解决方案,例如 Fileinfo 扩展。” secure.php.net/manual/en/function.getimagesize.php
    • @StephenR 上面的代码确实 使用 FileInfo 扩展名作为首选。早在 2010 年我写这个答案时,finfo_open 不一定可用。自 5.3.0 以来,它是 PHP 的一部分。在此之前,您必须通过 PECL 安装它。并不是每个人都能做到这一点,例如共享主机。所以人们需要一个后备。虽然其他三个确实不那么可靠,但他们确实完成了工作。所以我不明白指出那个文档段落的意义。
    【解决方案3】:

    您可以使用finfo_file function检查 MIME 类型

    帮助页面中的示例

    <?php
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
    foreach (glob("*") as $filename) {
        echo finfo_file($finfo, $filename) . "\n";
    }
    finfo_close($finfo);
    ?>
    

    编辑:更好地检查您的问题后,这将不起作用,finfo 函数需要 PHP 5.3.0

    【讨论】:

      【解决方案4】:
      if(isset($_FILES['my_file'])) {
      $mime = $_FILES['my_file']['type'];
      if(strstr($mime, "video/")){
      $filetype = "video";
      }else if(strstr($mime, "image/")){
      $filetype = "image";
      }else if(strstr($mime, "audio/")){
      $filetype = "audio";
      }  
      

      【讨论】:

      • 虽然这段代码可能会回答这个问题,但最好解释一下它是如何解决问题的以及为什么要使用它。从长远来看,纯代码的答案没有用处。
      • 此答案仅适用于上传的文件。此外,the 'type' is provided by the browser (if any) 可能不被完全信任。
      【解决方案5】:

      我使用以下代码,该代码比第一个也是最受好评的答案更普遍:

      $mimeType = mime_content_type($filename);
      $fileType = explode('/', $mimeType)[0];
      

      我希望它对任何人都有帮助。

      【讨论】:

        【解决方案6】:

        相当老的问题,但对于其他人在未来看这个,我会这样处理:

        function getType($file): string
        {
            $mime_type = mime_content_type($file);
        
            return strtok($mime_type, '/');
        }
        

        此方法利用strtok 返回第一个/ 之前的$mime_type 字符串部分。

        例如,假设$file 具有video/mp4$mime_typegetType 方法将返回video

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-11
          • 2013-06-13
          • 2013-08-20
          • 2014-08-31
          • 2020-10-26
          • 2017-07-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多