Эти функции выполняют одинаковые проверки для обнаружения файла MIME-типа? Есть ли какие-либо преимущества в выборе одного над другим (то есть с точки зрения надежности / безопасности)?
Они предназначены для разных целей, поэтому вы можете использовать их в определенной области.
Я предпочитаю использовать finfo
для первой проверки надежности файла, если я не знаю его происхождение
getimagesize — получить размер изображения
Который также может собрать мета-сегмент для приложения JPG и предполагать обнаружить изображение пантомимы
А также
finfo_file — возвращает информацию о файле
Вы получите метаинформацию из файла
Если вы пометили GD, возможно, вы взаимодействуете только с изображениями (?). Так что вы можете использовать getimagesize()
, которые, похоже, возвращают тип mime-файла независимо от его расширения, имея +1 к безопасности, но, вероятно, ограниченные поддерживаемыми PHP типами изображений.
Мой PHP 5.6.4 имеет:
[IMAGETYPE_GIF] => 1
[IMAGETYPE_JPEG] => 2
[IMAGETYPE_PNG] => 3
[IMAGETYPE_SWF] => 4
[IMAGETYPE_PSD] => 5
[IMAGETYPE_BMP] => 6
[IMAGETYPE_TIFF_II] => 7
[IMAGETYPE_TIFF_MM] => 8
[IMAGETYPE_JPC] => 9
[IMAGETYPE_JP2] => 10
[IMAGETYPE_JPX] => 11
[IMAGETYPE_JB2] => 12
[IMAGETYPE_SWC] => 13
[IMAGETYPE_IFF] => 14
[IMAGETYPE_WBMP] => 15
[IMAGETYPE_JPEG2000] => 9
[IMAGETYPE_XBM] => 16
[IMAGETYPE_ICO] => 17
[IMAGETYPE_UNKNOWN] => 0
[IMAGETYPE_COUNT] => 18
ОС другой стороны, я предлагаю вам использовать finfo
, чтобы получить реальную мета-информацию вашего файла.
finfo
не читайте ничего, кроме заголовков, getimagesize
может также вернуть некоторые маркеры, а также дополнительную информацию (дополнительные вычисления), специфичное для изображения Информация.
LЭто проверка:
Имея эту простую нестандартную функцию:
function displayInfo($path, $info = FILEINFO_MIME_TYPE ) {
$imageinfo = array();
$getimagesize = array();
$finfo = new finfo($info);
$finfo_mt = $finfo->file($path);
print_r(getimagesize($path, $imageinfo));
print_r($imageinfo);
print_r($finfo_mt);
}
Вы можете использовать $ info = FILEINFO_MIME, чтобы вернуть тип и кодировку для безопасный чтение файла Так,
display('file.php');
будет выводить
Array
(
)
text/x-php
display('image.png.hide');
а также
display('image.png');
будет выводить
Array
(
[0] => 31
[1] => 31
[2] => 3
[3] => width="31" height="31"[bits] => 8
[mime] => image/png
)
Array
(
)
image/png
а также,
display('image.jpg');
будет выводить
Array
(
[0] => 206
[1] => 206
[2] => 2
[3] => width="206" height="206"[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
Array
(
[APP0] => JFIF
[APP13] => Photoshop 3.08BIMgldeLs_Kr6L1Vvu73FGOs(bFBMD01000ac1030000b1060000ad0b00006f0c0000800d0000fe11000011180000bf180000c8190000ef1a0000d2240000
[APP2] => [REMOVED UTF CHARS FOR stackoverflow]
)
image/jpeg
Надеюсь, что на ваш вопрос будет указано.
ну, в принципе, есть два способа найти mime-типы файлов … один — mime_content_type, а другой — информация о файле …
Вы можете сослаться на URL ниже:
http://php.net/manual/en/function.finfo-file.php
http://php.net/manual/en/function.mime-content-type.php
mime_content_type устарел .. метод информации о файле предназначен для последних версий php … информация о файле требует, чтобы на сервере было включено расширение fileinfo …