[Moscow.pm] аналоги File::Magic
Ruslan Zakirov
ruslan.zakirov на gmail.com
Ср Дек 23 14:16:57 PST 2009
2009/12/23 Alexey Kolpakov <kolpak на stack.net>:
> Понял, спасибо!
>
> Кто из них быстрее?
perl contrib/bench-mime-detect.pl /Users/ruz/f1.avi
module: SVK::MimeDetect::FileMMagic type: application/octet-stream
module: SVK::MimeDetect::FileType type: video/x-msvideo
module: SVK::MimeDetect::Internal type: application/octet-stream
Rate File::MMagic File::Type Internal
File::MMagic 234/s -- -97% -99%
File::Type 7965/s 3308% -- -65%
Internal 22500/s 9527% 182% --
Как видите есть разница в определении. Наверное LibMagic будет
поинтереснее, так как она на сигнатурах работает. У меня просто не
стоит в системе либа.
module: SVK::MimeDetect::FileMMagic type: application/x-gzip
module: SVK::MimeDetect::FileType type: application/x-gzip
module: SVK::MimeDetect::Internal type: application/octet-stream
Rate File::MMagic File::Type Internal
File::MMagic 1167/s -- -81% -95%
File::Type 6164/s 428% -- -72%
Internal 21951/s 1780% 256% --
Поставил либу libmagic, которая из дистра file. Вот такие результаты:
module: SVK::MimeDetect::FileLibMagic type: application/x-gzip
module: SVK::MimeDetect::FileMMagic type: application/x-gzip
module: SVK::MimeDetect::FileType type: application/x-gzip
module: SVK::MimeDetect::Internal type: application/octet-stream
Rate File::MMagic File::LibMagic File::Type Internal
File::MMagic 1184/s -- -46% -81% -95%
File::LibMagic 2211/s 87% -- -65% -90%
File::Type 6250/s 428% 183% -- -72%
Internal 21951/s 1754% 893% 251% --
module: SVK::MimeDetect::FileLibMagic type: video/x-msvideo
module: SVK::MimeDetect::FileMMagic type: application/octet-stream
module: SVK::MimeDetect::FileType type: video/x-msvideo
module: SVK::MimeDetect::Internal type: application/octet-stream
Rate File::MMagic File::LibMagic File::Type Internal
File::MMagic 235/s -- -52% -97% -99%
File::LibMagic 492/s 109% -- -94% -98%
File::Type 7895/s 3261% 1506% -- -65%
Internal 22500/s 9480% 4477% 185% --
module: SVK::MimeDetect::FileLibMagic type: image/jpeg
module: SVK::MimeDetect::FileMMagic type: image/jpeg
module: SVK::MimeDetect::FileType type: image/jpeg
module: SVK::MimeDetect::Internal type: application/octet-stream
Rate File::MMagic File::LibMagic File::Type Internal
File::MMagic 536/s -- -56% -89% -98%
File::LibMagic 1210/s 126% -- -74% -94%
File::Type 4712/s 779% 290% -- -79%
Internal 21951/s 3993% 1715% 366% --
В общем как-то так. Я бы остановился на LibMagic или File::Type
Обязательно нужно сравнить на файлах без расширений. Хотя зависит от задачи.
> Internal чем отличается от остальных?
Там простая проверка, нужно просто знать бинарный или текстовой файл.
Возможно используется что-то из либ subversion'а.
> Ruslan Zakirov пишет:
>>
>> Привет, Алексей.
>>
>> Есть у нас в SVK вот такой вот скрипт для бенчмарка четырех вариантов:
>>
>> use strict;
>> use warnings;
>>
>> use Benchmark qw( cmpthese );
>>
>> my %modules = map {
>> eval "require $_" if $_ ne 'Internal';
>> $@ ? () : ( $_ => make_sub($_) )
>> } qw( File::LibMagic File::MMagic File::Type Internal );
>>
>> my $filename = 'data.sample';
>> open my $fh, '>', $filename;
>> print $fh 'Some sample ASCII data for mime detecting';
>> close $fh;
>>
>> cmpthese( 9_000, \%modules );
>>
>> sub make_sub {
>> ( my $module = shift ) =~ s/:://g;
>> $module = "SVK::MimeDetect::$module";
>> eval "require $module";
>> die "Couldn't load $module\n" if $@;
>> my $object = $module->new();
>> return sub { $object->checktype_filename($filename) };
>> }
>>
>>
>> 2009/12/23 Alexey Kolpakov <kolpak на stack.net>:
>>>
>>> Привет!
>>> Какие модули посоветуете использовать для определения типа файла
>>> (расположенного на локальном диске)?
>>>
>>> Спасибо.
>>> --
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>>>
>>
>>
>>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
--
Best regards, Ruslan.
Подробная информация о списке рассылки Moscow-pm