How to get MIME type of a file in PHP 5.5?

前端 未结 8 1918
鱼传尺愫
鱼传尺愫 2020-11-30 07:10

I am using mime_content_type() in PHP 5.5 to get a MIME type, but it throws fatal: error function not found.

How can I achieve this on PHP

8条回答
  •  半阙折子戏
    2020-11-30 08:08

    I've spent too much time trying to get the finfo functions to work, properly. I finally just ended up creating my own function to match the file extension to any array of mime types. It's not a full-proof way of assuring that the files are truly what the extension denotes them to be, but that problem can be mitigated by how you process I/O of said files on your server(s).

    function mime_type($file) {
    
        // there's a bug that doesn't properly detect
        // the mime type of css files
        // https://bugs.php.net/bug.php?id=53035
        // so the following is used, instead
        // src: http://www.freeformatter.com/mime-types-list.html#mime-types-list
    
        $mime_type = array(
            "3dml" => "text/vnd.in3d.3dml",
            "3g2" => "video/3gpp2",
            "3gp" => "video/3gpp",
            "7z" => "application/x-7z-compressed",
            "aab" => "application/x-authorware-bin",
            "aac" => "audio/x-aac",
            "aam" => "application/x-authorware-map",
            "aas" => "application/x-authorware-seg",
            "abw" => "application/x-abiword",
            "ac" => "application/pkix-attr-cert",
            "acc" => "application/vnd.americandynamics.acc",
            "ace" => "application/x-ace-compressed",
            "acu" => "application/vnd.acucobol",
            "adp" => "audio/adpcm",
            "aep" => "application/vnd.audiograph",
            "afp" => "application/vnd.ibm.modcap",
            "ahead" => "application/vnd.ahead.space",
            "ai" => "application/postscript",
            "aif" => "audio/x-aiff",
            "air" => "application/vnd.adobe.air-application-installer-package+zip",
            "ait" => "application/vnd.dvb.ait",
            "ami" => "application/vnd.amiga.ami",
            "apk" => "application/vnd.android.package-archive",
            "application" => "application/x-ms-application",
            // etc...
            // truncated due to Stack Overflow's character limit in posts
        );
    
        $extension = \strtolower(\pathinfo($file, \PATHINFO_EXTENSION));
    
        if (isset($mime_type[$extension])) {
            return $mime_type[$extension];
        } else {
            throw new \Exception("Unknown file type");
        }
    
    }
    

    Edit:

    I'd like to address Davuz's comment (since it keeps getting up-voted) and remind everyone that I put in the pseudo disclaimer at the top that this isn't "full-proof." So, please keep that in mind when considering the approach I've offered in my answer.

提交回复
热议问题