Как читать заголовок файла, загруженного на PHP?

Можем ли мы прочитать информацию заголовка файла в PHP, чтобы определить тип загруженного файла ?.

Я не хочу полагаться на $_FILES['control_name_from_client']['type']. Как известно, это свойство определяет тип файла, считывая расширение загруженного файла.

Что делать, если пользователь переименовывает, скажем test.jpg -> test.xls . В этом случае $_FILES['control_name_from_client']['type'] покажет тип как application / vnd.ms-excel вместо image / jpeg . Естественно, это может создать проблемы, если необходимо выполнить код, который считывает файл XLS для извлечения данных для некоторой обработки.

Любые предложения, пожалуйста?

Попробуйте finfo_file() . Вы должны называть это передачей пути к файлу. Пример:

 $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime = finfo_file($finfo, $_FILES['control_name_from_client']['tmp_name']); finfo_close($finfo); 

Вам нужно расширение Fileinfo . Как написано в руководстве PHP:

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

насколько мне известно, такой функции нет в PHP, но если у вас есть доступ к CLI (и работает под управлением Linux), вы можете использовать команду «file» через system ().

Раньше было расширение mime_magic в более старых версиях PHP, но теперь это устарело в пользу finfo_file , который использует сигнатуры файлов для проверки типа файла, а не только расширения.

Dunno, что «заголовок», о котором вы говорите, но с точки зрения безопасности единственное, на что вы действительно должны обратить внимание, это расширение имени файла .
Просто потому, что ваш веб-сервер будет судить о вашем файле.

Чтобы проверить, являются ли загруженные файлы действительными данными для какого-либо конкретного приложения, вы должны использовать эту прикладную программу, в PHP нет универсального инструмента. вы можете использовать imagemagick для изображений, getid3 для mp3-файлов, fffmpeg для фильмов и так далее.

Но, конечно, весь файл должен быть использован, проверка только «заголовка» не гарантирует, что весь файл действителен.