Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Vlad Degtyarov                       2:5020/400     28 Aug 2002  16:29:42
 To : All
 Subject : проверка картинок
 -------------------------------------------------------------------------------- 
 
 типа всем драсти
 
 я тут смотрю что, для проверки файла на "картинкость" ;) т.е. на то, 
 что файл является картинкой(чтоб там кто-нибудь не засылал нам всяких 
 троянов), в основном используют модуль Image::Size (или еще что-то?), 
 но например не всегда нужно знать размеры картинки, просто надо знать 
 картинка это или нет. Hо и не всегда, кстати, есть возможность 
 использовать Image::Size.
 
 Вот принимая это во внимание я тут кой чего накрапал, а именно:
 
 ________________________________________________________________
 
 sub webImage
 {
     my $handle = shift;
     my $header = '';
     
     my @type_map = ('^GIF8[7,9]a',      # gif
        "^\xFF\xD8",      # jpeg
        "^\x89PNG\x0d\x0a\x1a\x0a" ); # png
   
     binmode($handle);
     seek($handle, 0, 0);
     read $handle, $header, 128;
     seek($handle, 0, 0);      
       
     return grep($header =~ /$_/, @type_map);      
 }
 ________________________________________________________________
 
 это функция проверяющая файл на "картинкость" ;)
 (тут проверяются файлы только на gif,jpeg и png, но можно добавить 
 проверку и на другие файлы, например bmp,swf,xbm,xpm,tiff и т.д.)
 
 а вот как ее можно юзать:
 
 open(IMG,'c:\\image.gif') or die;
 if( webImage(IMG) ) {
     print 'Yap! Diz iz imajek ;)';
     # че нить с файлом делаем
 } else {
     print 'Hey! Das ist not kartinka!';
 }
 close(IMG); # взял, попользовался - поставь на место!
 
 теперь всем все ясно.
 Hу в принципе можно нарисовать вам БОHУС дня, 'имэдж даунлоадер':
 ________________________________________________________________
 #!perl -w
 #!/usr/local/bin/perl -w
 
 # если у вас уних, или у них у вас... 
 # короче на unix убрать первую строчку ;)
 
 use CGI qw(:standard);
 use CGI::Carp qw/fatalsToBrowser/;
 
 sub webImage
 {
     my $handle = shift;
     my $header = '';
     
     my @type_map = ('^GIF8[7,9]a',      # gif
        "^\xFF\xD8",      # jpeg
        "^\x89PNG\x0d\x0a\x1a\x0a" ); # png
   
     binmode($handle);
     seek($handle, 0, 0);
     read $handle, $header, 128;
     seek($handle, 0, 0);      
       
     return grep($header =~ /$_/, @type_map);      
 }
 
 print header();
 print start_html("Image File Upload");
 
 print h1("Image File Upload! Muhahaha!");
 
 # Start a multipart form.
 print start_multipart_form(),
     'Enter the file to process: ',
     filefield('filename','',45),
     p,submit,
     endform;
 
 # Process the form if there is a file name entered
 if ($file = param('filename')) {
     $tmpfile=tmpFileName($file);
     $mimetype = uploadInfo($file)->{'Content-Type'} || '';
 
     open(FH,$tmpfile) or die $!;
     $ii = ( webImage(FH) ? 'Yes' : 'No' );
     # Тут файл кудато переписываем, например в БД      
     close(FH);     
 
     print hr(),
     h3('Your file: '.$file),
     h3('My file: '.$tmpfile),
     h3('MIME Type: '.em($mimetype)),
     h3('Image: '.$ii);
 }
 
 print hr(),
     'for more design info read CGI.pm documentation ;)',
     end_html;
 ________________________________________________________________
 
 Вот.
 Короче Randy J. Ray спасибо за модуль Image::Size.
 
 Если кто-то, когда-то уже такое писал (в этой эхе), то извините - не 
 знал.
 -- 
 Только сядешь поработать, обязательно кто-нибудь разбудит!
 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 проверка картинок   Vlad Degtyarov   28 Aug 2002 16:29:42 
 Re: проверка картинок   Artem Chuprina   29 Aug 2002 11:45:19 
 Re: проверка картинок   Vlad Degtyarov   30 Aug 2002 22:48:05 
Архивное /ru.perl/6488ec3bfdf9.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional