Здесь у вас есть два варианта, один простой и предварительно с некоторыми недостатками, другой сложный и требует математики.
PHP fileinfo может использоваться для определения типов файлов на основе фактической информации заголовка файла. Например, я только что схватил твой гравитар:
Но фактический код таков:
‰PNG
IHDR szzô
IDATX…—OL\UÆZÀhëT)¡ c•1T:1‘Š‘.Ú(]4†A“ÒEY˜à.................................
Так что, даже без имени файла я мог обнаружить его совершенно очевидно. Это то, что будет делать расширение PHP Fileinfo. В большинстве файлов PNG и JPG этот заголовок, как правило, присутствует, но это не так для каждого типа файла.
Как говорится, fileinfo очень прост в использовании из руководства:
$fi = new finfo(FILEINFO_MIME,'/usr/share/file/magic');
$mime_type = $fi->buffer(file_get_contents($file));
Ваш другой вариант более сложный и зависит от ваших личных амбиций, вы можете создать гистограмму и файлы профиля на основе их содержания .
Примерно так выглядит файл GIF:
И что-то вроде этого выглядит как файл TIFF:
Оттуда вам нужно будет сгенерировать модель для нескольких типов файлов для того, какой должна быть гистограмма каждого типа, а затем использовать ее, чтобы угадать. Это хороший метод для файлов, которые на самом деле не имеют тех «волшебных заголовков», которые можно легко прочитать. Имейте в виду, вам нужно изучить некоторые математические навыки и способы моделирования средней функции гистограммы и сопоставления их с файлами.