Я пытаюсь определить, являются ли некоторые файлы на самом деле изображениями (используя 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); ?>
В большинстве форматов файлов есть заголовок, который помогает определить, какой файл он есть. Например, файлы GIF всегда начинаются с GIF87
База данных магических чисел представляет собой список всех заголовков и позволяет finfo()
идентифицировать файлы.
У Windows эта база данных не установлена по умолчанию. Вам нужно будет принести его для окон. Фактически вы должны использовать одну и ту же базу данных независимо от того, где вы развертываете, чтобы улучшить совместимость с кросс-платформой. Представьте, что вы развернулись к старой системе, которая не знает о типах файлов, которые понимает ваша платформа разработчиков.
Будет ли альтернативное решение состоять в том, чтобы увидеть, возвращает ли exif_imagetype
false
?
На моем Ubuntu он находится в /usr/share/file/magic.mime
. Я не знаю о Windows. И да, обычно для разных форматов файлов есть специальный префикс (даже если нет расширения, вы можете распознать GIF, например, из-за того, что он всегда начинается со строки «GIF»).