Determinate mime type from MySQL column

后端 未结 4 911
闹比i
闹比i 2021-01-06 16:20

I received an exported database from MSAccess (not my favorite) and I imported it to a MySQL table. There\'s a column named \'customerImage\' and is a \'long BLOB\' type wit

相关标签:
4条回答
  • 2021-01-06 16:57

    The FileInfo extension can be used. It contains a function called finfo_buffer()

    0 讨论(0)
  • 2021-01-06 17:01

    Save the blob to a temp file and use the php finfo_file function on it.

    0 讨论(0)
  • 2021-01-06 17:04

    IF your host still uses php 5.2 and dont have access to the fileinfo functions you can test the files header signature (magic numbers) to determine mime type

    function mimetype($data)
    {
        //File signatures with their associated mime type
        $Types = array(
        "474946383761"=>"image/gif",                        //GIF87a type gif
        "474946383961"=>"image/gif",                        //GIF89a type gif
        "89504E470D0A1A0A"=>"image/png",
        "FFD8FFE0"=>"image/jpeg",                           //JFIF jpeg
        "FFD8FFE1"=>"image/jpeg",                           //EXIF jpeg
        "FFD8FFE8"=>"image/jpeg",                           //SPIFF jpeg
        "25504446"=>"application/pdf",
        "377ABCAF271C"=>"application/zip",                  //7-Zip zip file
        "504B0304"=>"application/zip",                      //PK Zip file ( could also match other file types like docx, jar, etc )
        );
    
        $Signature = substr($data,0,60); //get first 60 bytes shouldnt need more then that to determine signature
        $Signature = array_shift(unpack("H*",$Signature)); //String representation of the hex values
    
        foreach($Types as $MagicNumber => $Mime)
        {
            if( stripos($Signature,$MagicNumber) === 0 )
                return $Mime;  
        }
    
        //Return octet-stream (binary content type) if no signature is found
        return "application/octet-stream"; 
    }
    

    NOTE: Some signatures may match partials of others, for instance the PK Zip file signature matches the first 4 bytes of java archive (.jar) file signature, extra statements would be needed in the foreach loop to determine the correct signature for the mime type, but for your situation this should do.

    A updated list of file signatures can be found at http://www.garykessler.net/library/file_sigs.html if someone needs more file signature types.

    0 讨论(0)
  • 2021-01-06 17:13

    The FileInfo extension, and, more specifically, its finfo_buffer() function, might help, here (quoting) :

    This function is used to get information about binary data in a string.

    Fetching your binary data from database, and passing it to this function, might do the trick.


    Note : its comes with PHP >= 5.3

    0 讨论(0)
提交回复
热议问题