Определение типа файла с помощью PHP.Что такое база данных Magic? - PullRequest
6 голосов
/ 17 мая 2011

Я пытаюсь определить, являются ли некоторые файлы изображениями (используя PHP). Мне посоветовали использовать finfo, и я пытаюсь понять, как это работает.

Чего я не понимаю - что такое база магических чисел и как она работает? Я немного озадачен - есть ли у каждого файла определенное «магическое число», которое вы сравниваете с этой базой данных?

Кроме того - у меня есть это на моем Debian Squeeze - но будет ли это также доступно на платформе WIN? или нужно приложить эту базу данных вместе с приложением?

<?php
$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic.mgc");
if (!$finfo) {
    echo "Opening fileinfo database failed";
    exit();
}

/* get mime-type for a specific file */
$filename = "/usr/local/something.txt";
echo $finfo->file($filename);

?>

Ответы [ 3 ]

6 голосов
/ 17 мая 2011

У большинства форматов файлов есть заголовок, который помогает определить тип файла.Например, GIF-файлы всегда начинаются с GIF87

База данных магических чисел представляет собой список всех заголовков и позволяет finfo() идентифицировать файлы.

Windows не имеет этой базы данныхустановлен по умолчанию.Вы должны были бы принести это для окон.Фактически, вы должны использовать одну и ту же базу данных независимо от того, где вы развертываете, для улучшения кроссплатформенной совместимости.Представьте, что вы внедрили в старую систему, которая не знает о типах файлов, которые понимает ваша платформа разработки.

1 голос
/ 17 мая 2011

На моем Ubuntu он находится в /usr/share/file/magic.mime. Я не знаю о Windows. И да, обычно разные форматы файлов имеют определенный префикс именно для этой цели (даже если нет расширения, вы можете распознать GIF, например, по тому факту, что он всегда начинается со строки «GIF»).

1 голос
/ 17 мая 2011

Было бы альтернативным решением посмотреть, вернется ли exif_imagetype false?

...