Определить тип MIME из столбца MySQL - PullRequest
3 голосов
/ 15 марта 2011

Я получил экспортированную базу данных от MSAccess (не из моих любимых) и импортировал ее в таблицу MySQL.Есть столбец с именем customerImage и это тип «длинный BLOB» с атрибутом «двоичный».Как я могу определить Mime Type?Я пробовал разные методы, но все они должны быть файлом, но данными.

Если кто-то может помочь мне с кодом PHP или командой MySQL, было бы здорово.

Ответы [ 4 ]

4 голосов
/ 23 марта 2011

Если ваш хост по-прежнему использует php 5.2 и не имеет доступа к функциям fileinfo, вы можете проверить сигнатуру заголовка файла (магические числа), чтобы определить тип mime

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"; 
}

ПРИМЕЧАНИЕ: Некоторые подписи могут совпадать с частями других, например, подпись файла PK Zip совпадает с первыми 4 байтами подписи файла архива java (.jar), дополнительные инструкции потребуются в цикл foreach, чтобы определить правильную сигнатуру для типа mime , но для вашей ситуации это следует сделать.

Обновленный список подписей файлов можно найти по адресу http://www.garykessler.net/library/file_sigs.html, если кому-то нужно больше типов подписей файлов.

3 голосов
/ 15 марта 2011

Может помочь расширение FileInfo и, более конкретно, его функция finfo_buffer(), здесь ( цитирование) :

Эта функция используется для получения информация о двоичных данных в строка.

Извлечение двоичных данных из базы данных и передача их этой функции может помочь.


Примечание: поставляется с PHP> = 5,3

1 голос
/ 15 марта 2011

Сохраните большой двоичный объект во временный файл и используйте для него функцию php finfo_file .

0 голосов
/ 15 марта 2011

Может использоваться расширение FileInfo .Он содержит функцию с именем finfo_buffer()

...