Вы можете использовать магические числа , просмотреть некоторые другие списки сигнатур файлов (, например, здесь ), а затем проверить двоичные данные для первого байта.
function getfiletype($file) {
$handle = @fopen($file, 'r');
if (!$handle)
throw new Exception('File error - Can not open File or file missing');
$types = array( 'jpeg' => "\xFF\xD8\xFF",
'gif' => 'GIF',
'bmp' => 'BM',
'tiff' => '\x49\x20\x49',
'png' => "\x89\x50\x4e\x47\x0d\x0a",
'psd' => '8BPS',
'swf' => 'FWS');
$bytes = fgets($handle, 8);
$filetype = 'other';
foreach ( $types as $type => $header ) {
if ( strpos( $bytes, $header ) === 0) {
$filetype = $type;
break;
}
}
fclose($handle);
return $filetype;
}
На самом деле это очень простая функция замены для file_info (), которая работает практически так же, но на значительно расширенном (и более низком) уровне.
Альтернативой является использование уже созданного внешнего класса php, например , например, ..