【问题标题】:Determining file type in PHP without MIME or extension [duplicate]在没有 MIME 或扩展名的 PHP 中确定文件类型
【发布时间】:2013-11-11 13:15:23
【问题描述】:

我有一个可以上传文件的 PHP 网站,我希望能够根据文件类型执行某些操作。但是我不想相信浏览器说它是什么类型的文件,而宁愿阅读文件的标题来确定它。 PHP中是否存在为此的任何库?或者这是我需要从头开始写的东西?

【问题讨论】:

    标签: php


    【解决方案1】:

    PHP 中有一个名为fread() 的函数,您可以使用它来读取二进制文件:

    http://php.net/manual/en/function.fread.php

    您可以使用它读取文件的前几个字节以获取标题并确定文件类型。

    【讨论】:

    • 这远不是确定文件类型的完整方法。
    • No s*** Sherlock - 显然他必须分析他从文件中读取的内容以确定文件类型。再次阅读他的问题:“......宁愿阅读文件的标题来确定它。PHP 中是否存在任何库?或者这是我需要从头开始编写的东西?”
    • 我读了他的问题。有几种方法可以做到这一点,而无需重新发明轮子。
    【解决方案2】:

    使用为您执行此操作的 finfo 函数。

    以前可以使用 mime_content_type 函数,现在已弃用,所以改为使用

    $finfo = new finfo(FILEINFO_MIME);
    $type  = $finfo->file('path/filename');
    

    【讨论】:

    • 我不确定为什么这被否决了。虽然,是的,它使用 MIME - 它没有使用浏览器报告的 MIME 类型。
    • 是用文件名来确定MIME吗?还是读取文件头?
    • 我想它使用 mime.magic
    • 更好的方法:$type = finfo_open($path_to_image);
    • @directedition 它不使用文件名来确定 MIME。即使文件上的文件扩展名不正确,这也会报告正确的文件类型,而不管它具有什么扩展名。 mime_content_type ( $path_to_file ) 也可以。
    【解决方案3】:

    文件信息功能可以给你文件类型

     $finfo = finfo_open(FILEINFO_MIME_TYPE);
    
     echo finfo_file($finfo, $filename);
    

    它可以给出类似的输出

    text/html
    image/gif
    application/vnd.ms-excel
    

    【讨论】:

      【解决方案4】:

      curl_getinfo 应该可以帮助http://php.net/curl_getinfo 与此问题相关:Get mime type of external file using cURL and php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-14
        • 2011-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-11
        • 1970-01-01
        • 2013-05-06
        相关资源
        最近更新 更多