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

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

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

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    полный код ...
    PHP:
    ### Заходим на сайт и получаем капчу
    $ch curl_init('http://mirtesen.ru/login');
    curl_setopt($chCURLOPT_HEADER1);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_USERAGENT'Opera/9.25 (Windows NT 5.1; U; ru)');
    $res  curl_exec($ch);
    curl_close($ch);

    ### Получаем код для картинки
    preg_match('#<img src="http://mirtesen.ru/captcha/login?(.*?)"#i'$res$match_capt);

    ### Получаем куки
    preg_match_all('|Set-Cookie: (.*);|U'$res$results);
    $cookies implode(';'$results[1]);


    ### Показываем капчу
    echo '<img src="http://mirtesen.ru/captcha/login'.$match_capt[1].'" alt="">
    <p><form name="spam" action="index.php" method="POST">
    <input type="text" name="captcha">
    <input type="submit" value ="Ok"></form>'
    ;


    ### Отправляем обратно капчу/логин/пассворд
    if(isset($_POST['captcha'])){
        
    $ch curl_init('http://mirtesen.ru/login');
    curl_setopt($chCURLOPT_USERAGENT'Opera/9.25 (Windows NT 5.1; U; ru)');
    curl_setopt($chCURLOPT_PROXY$proxy);
    curl_setopt($chCURLOPT_RETURNTRANSFER0);
    curl_setopt($chCURLOPT_HEADER1);
    curl_setopt($chCURLOPT_POST1);
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    curl_setopt($chCURLOPT_POSTFIELDS'auth%5Bbackurl%5D=http%3A%2F%2Fmirtesen.ru%2F&auth%5Blogin%5D=LOGIN%40mail.ru&auth%5Bpassword%5D=PASSWORD&auth%5Bcaptcha%5D='.trim($_POST['captcha']).'&auth%5Bremember%5D=on');
    curl_setopt($chCURLOPT_COOKIE$cookies);
    $res  curl_exec($ch);
    curl_close($ch);
    }
     
    #10321 geforse, 7 Jun 2009
    Last edited: 7 Jun 2009
  2. 5triker

    5triker Elder - Старейшина

    Joined:
    5 Apr 2007
    Messages:
    62
    Likes Received:
    41
    Reputations:
    1
    PHP:
    if(!isset($_POST['captcha']))
    {
     
    ### Заходим на сайт и получаем капчу 
    $ch curl_init('http://mirtesen.ru/login'); 
    curl_setopt($chCURLOPT_HEADER1); 
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
    curl_setopt($chCURLOPT_USERAGENT'Opera/9.25 (Windows NT 5.1; U; ru)'); 
    $res  curl_exec($ch); 
    curl_close($ch); 

    ### Получаем код для картинки 
    preg_match('#<img src="http://mirtesen.ru/captcha/login?(.*?)"#i'$res$match_capt); 

    ### Получаем куки 
    preg_match_all('|Set-Cookie: (.*);|U'$res$results); 
    $cookies implode(';'$results[1]); 


    ### Показываем капчу 
    echo '<img src="http://mirtesen.ru/captcha/login'.$match_capt[1].'" alt=""> 
    <p><form name="spam" action="index.php" method="POST"> 
    <input type="text" name="captcha"> 
    <input type="submit" value ="Ok"></form>'

    }

    ### Отправляем обратно капчу/логин/пассворд 
    if(isset($_POST['captcha'])){ 
         
    $ch curl_init('http://mirtesen.ru/login'); 
    curl_setopt($chCURLOPT_USERAGENT'Opera/9.25 (Windows NT 5.1; U; ru)'); 
    curl_setopt($chCURLOPT_PROXY$proxy); 
    curl_setopt($chCURLOPT_RETURNTRANSFER0); 
    curl_setopt($chCURLOPT_HEADER1); 
    curl_setopt($chCURLOPT_POST1); 
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
    curl_setopt($chCURLOPT_POSTFIELDS'auth%5Bbackurl%5D=http%3A%2F%2Fmirtesen.ru%2F&auth%5Blogin%5D=LOGIN%40mail.ru&auth%5Bpassword%5D=PASSWORD&auth%5Bcaptcha%5D='.trim($_POST['captcha']).'&auth%5Bremember%5D=on'); 
    curl_setopt($chCURLOPT_COOKIE$cookies); 
    $res  curl_exec($ch); 
    curl_close($ch); 

    т.е если скрипту не передаются данные из формы - выводит капчу и окошко для ввода,
    если передаются - отправляет
     
  3. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    не в этом дело)
    не работает :(
     
  4. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Запросы все отсылаются, но не логинится. Скорее всего бока с отправкой каптчи, ну сам алгоритм
    В куках с рисунком каптчи передаётся параметр mirtesen похожий на md5, но если захешировать номер каптчи, то они не совпадают + появляются поля htold и told
     
    #10324 FireFenix, 7 Jun 2009
    Last edited: 7 Jun 2009
  5. ZavodiJIo

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

    Joined:
    12 Nov 2006
    Messages:
    215
    Likes Received:
    163
    Reputations:
    9
    мне нужно просто вывести папки-поддомены.
     
    4 people like this.
  6. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Я уже это проверял:
    1) Это не мд5
    2) На капчу влияет только значение mirtesen!
     
  7. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    PHP:
    <?php 

    // html  
    print_r(
    <html> 
    <head> 
    <title>Test page!</title> 
    <meta http-equiv="Content-type" content="text/html; charset="windows-1251"> 
    <meta name="keywords" content="Test of my product" > 
    <meta name="description" content="Test of scritps, writed by ac1d"> 
    </head> 
    <body bgcolor="black"> 
    <font style="font-size: 30px; color: #006400;"> 

    '
    ); 

    $chb '<input type="checkbox" name="dir" value="1"> '

    // установка соединения 
    $conn_id ftp_connect("host");  

    // вход с именем пользователя и паролем 
    $login_result ftp_login($conn_id"login""password");  

    // проверка соединения 
    if ((!$conn_id) || (!$login_result)) { 
        die(
    "Не удалось подключиться к FTP серверу!"); 


    echo 
    "<b>Текущая директория:</b>" ftp_pwd($conn_id) . "\n"

    // попытка сделать somedir текущей 
    if (ftp_chdir($conn_id"/php/")) { 
        echo 
    ftp_pwd($conn_id) . "<br> \n"
    } else {  
        echo 
    "Не удалось сменить директорию <br> \n"


    $site ftp_nlist($conn_id".");  
    foreach(
    $site as $v)
    {
      if(!
    is_dir($v)) 
      {
        echo 
    $chb $v '<br>';
      }
    }
    // закрытие соединения 
    ftp_close($conn_id); 
    print_r(
    </font> 
    </body> 
    </html>'
    ); 
    ?>
     
  8. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    И также я заметил, незнаю почему, выводится 2 параметра установки куков из первого курла (я юзал регулярку preg_match_all('/Set-Cookie: ([^;]*)/i', $res, $cookies); )
    Code:
    Array
    (
        [0] => Array
            (
                [0] => Set-Cookie: mirtesen=jn35v1f3g248ufdr6aelhannb5
                [1] => Set-Cookie: mirtesen=0p48pipogk4oj7497a1po09gi6
            )
    
        [1] => Array
            (
                [0] => mirtesen=jn35v1f3g248ufdr6aelhannb5
                [1] => mirtesen=0p48pipogk4oj7497a1po09gi6
            )
    
    )
    
     
  9. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    2 параметра я тоже углядел ... Хз какой из них нужно отправлять )
     
  10. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Я пробывал оба, но результата 0 как нистранно :(
    Вобщем идея такова, когда ты получаешь контент - картинка одна. Когда браузер её загружает в img она другая
    Т.е. суть такова, что нада сохранять картинку с заголовком, потом показывать пользователю
     
    #10330 FireFenix, 7 Jun 2009
    Last edited: 7 Jun 2009
  11. spamoney

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

    Joined:
    26 Dec 2006
    Messages:
    120
    Likes Received:
    7
    Reputations:
    1
    Всем Добрый День, есть небольшой вопрос, помогите, пожалуйста, решить.

    Есть две строки, допустим:

    Code:
    $str1="index.php?var={num}&text={rus}&param={eng}";
    $str2="{rus}/page-{num}/{eng}.html";
    
    Необходимо, преобразовать $str2 в:

    Code:
    $str2="2/page-1/3.html";
    
    т.е нужно из $str1, выбрать весь текст в фигурных скобках ({num}, {rus}, {eng}), а также его местоположение в строке (т.е {num} стоит первый, {rus} - второй и т.д) и заменить каждый соответсвующий текст в фигурных скобках ({num}, {rus}, {eng}), в $str2 на его местоположение в $str1

    P/S
    Строки и местоположение {num}, {rus}, {eng} всегда разное!
     
  12. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Geforse Косяков у вас, что даже писать долго. Вот работающая версия:
    PHP:
        $login '';
        
    $pass '';
        
    session_start();

        function 
    post($url='',$content=null,$referer=null,$follow=0)
        {
            GLOBAL 
    $cookie;

            
    $ch curl_init();  
            
    curl_setopt($chCURLOPT_URL,$url);
            
    curl_setopt($chCURLOPT_HEADER1);
            
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);
            
    curl_setopt($chCURLOPT_TIMEOUT15);
            
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
            
    curl_setopt($chCURLOPT_FOLLOWLOCATION$follow); 
            if (!empty(
    $cookie)) curl_setopt($chCURLOPT_COOKIEimplode('; ',array_values($cookie)));
            if (!empty(
    $content)) {curl_setopt($chCURLOPT_POST1);curl_setopt($chCURLOPT_POSTFIELDS$content);} else {curl_setopt($chCURLOPT_POST0);}
            if (!empty(
    $referer)) curl_setopt($chCURLOPT_REFERER$referer);

            
    $ss=curl_exec($ch);
            
    curl_close($ch);
            
            if (
    preg_match_all('#^Set-Cookie: (([^;=]+)=([^;=]+))#mi',$ss,$cook)) 
            {
                if (
    $tmpcookie=array_combine($cook[2],$cook[1]))
                    
    $cookie=(array)$tmpcookie + (array)$cookie;
            }
            return 
    preg_replace('~[\s\S]+\r\n\r\n~U','',$ss,1);
        }
        
        if (!isset(
    $_POST['captcha']))
        {
            
    // Удаляем сессионный файл, чтобы не путал
            
    unset($_SESSION['mir']);
            
    // Получаем начальные куки
            
    $in post('http://mirtesen.ru/login');
            
    preg_match('#<img src="http://mirtesen.ru/captcha/login?(.*?)"#i'$in$match_capt);  
            
    // Делаем локальную копию куки ()ак надо)
            
    file_put_contents('local.jpg',post('http://mirtesen.ru/captcha/login?'.$match_capt[1],null,'http://mirtesen.ru/login'));
            
    // Выводим форму
            
    echo '<img src="local.jpg" alt=""><p><form name="spam" method="POST">
            <input type="text" name="captcha">
            <input type="submit" value ="Ok"></form>'
    ;
            
    // Сохраняем куки полученные при данном запуске
            
    $_SESSION['mir']=serialize($cookie);
        } else
        {
            
    // Загружаем куки, полученные при первом запуске скрипта
            
    $cookie $_SESSION['mir'] ? unserialize($_SESSION['mir']) : array();
            
    // Логинимся
            
    post('http://mirtesen.ru/login','auth%5Bbackurl%5D=&auth%5Blogin%5D='.urlencode($login).'&auth%5Bpassword%5D='.urlencode($pass).'&auth%5Bcaptcha%5D='.trim($_POST['captcha']).'&auth%5Bremember%5D=on','http://mirtesen.ru/login');
            
    // Выводим страницу
            
    $out post('http://mirtesen.ru/');
            
    $out iconv('UTF-8','Windows-1251',$out);
            echo 
    $out;
        }
    spamoney
    PHP:
    echo str_replace(array('{eng}','{rus}'),
    array(
    'эквивалент енг','эквивалент рус'),$str);
     
    _________________________
    #10332 Gifts, 7 Jun 2009
    Last edited: 7 Jun 2009
    1 person likes this.
  13. spamoney

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

    Joined:
    26 Dec 2006
    Messages:
    120
    Likes Received:
    7
    Reputations:
    1
    Нет, это совсем не то, необходимо определить местоположение {num} {rus} {eng} в $str1 и уже потом делать замену в $str2, примеры:

    PHP:
    $str1="index.php?var={num}&text={rus}&param={eng}";
    $str2="{rus}/page-{num}/{eng}.html";

    //Должно получиться:
    $str3="2/page-1/3.html";
    PHP:
    $str1="main.php?par={eng}&var={num}&param={rus}";
    $str2="{rus}/page-{num}/{eng}.html";

    //Должно получиться:
    $str3="3/page-2/1.html";
    PHP:
    $str1="show.php?tut={rus}&trem={eng}&pabam={num}";
    $str2="{rus}/page-{num}/{eng}.html";

    //Должно получиться:
    $str3="1/page-3/2.html";
    и т.д
     
  14. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    PHP:
    <?php

    //$str_1 = "index.php?var={num}&text={rus}&param={eng}";
    $str_1 'index.php?var=666&text=111&param=888';
    $str_2 '{rus}/page-{num}/{eng}.html';

    $regexp '/[\?|&]([^=]*)=([^&]*)/is';

    preg_match_all($regexp $str_1$match);

    for(
    $i 0$i count($match[2]); $i++)
    {
      switch(
    $match[1][$i])
      {
        case 
    'var':
          
    $var '{rus}';
        break;
        
        case 
    'text':
          
    $var '{num}';
        break;
        
        case 
    'param':
          
    $var '{eng}';
        break;
      }
      
      
    //$str_2="666/page-111/888.html";
      
    $str_2 str_replace($var$match[2][$i], $str_2);
    }

    echo(
    $str_2);

    ?>
    или
    PHP:
    <?php

    $str_1 
    "index.php?var={num}&text={rus}&param={eng}";
    $str_2 '{rus}/page-{num}/{eng}.html';

    $regexp '/[\?|&]([^=]*)=([^&]*)/is';

    preg_match_all($regexp $str_1$match);

    for(
    $i 0$i count($match[2]); $i++)
    {
      switch(
    $match[2][$i])
      {
        case 
    '{rus}':
          
    $var '1';
        break;
        
        case 
    '{num}':
          
    $var '2';
        break;
        
        case 
    '{eng}':
          
    $var '3';
        break;
      }
      
      
    $str_2 str_replace($match[2][$i], $var$str_2);
    }

    echo(
    $str_2);

    ?>

    Наверное ты так хотел?
     
    #10334 FireFenix, 7 Jun 2009
    Last edited: 7 Jun 2009
    1 person likes this.
  15. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Gifts огромное спасибо ... +++ ставить ?))
    жалко поортить 777 :)
     
  16. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    spamoney
    PHP:
    $str1="show.php?tut={rus}&trem={eng}&pabam={num}";
    $str2="{rus}/page-{num}/{eng}.html";
    function 
    zamena($str1,$str2)
    {
        
    $array = array('{rus}','{num}','{eng}');
        foreach (
    $array as $one$outarr[$one]=strpos($str1,$one);
        
    asort($outarrSORT_NUMERIC);
        
    $outarr=array_keys($outarr);
        foreach (
    $outarr as $i => $one$str2 str_replace($one,$i+1$str2);
        return 
    $str2;
    }
    echo 
    zamena($str1,$str2);    
     
    _________________________
    2 people like this.
  17. spamoney

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

    Joined:
    26 Dec 2006
    Messages:
    120
    Likes Received:
    7
    Reputations:
    1
    Пасиб, но это совсем не то)

    Gifts, спасибо то что надо, выручил!
     
  18. mff

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

    Joined:
    12 Mar 2008
    Messages:
    2,074
    Likes Received:
    701
    Reputations:
    227
    Спасибо ребят, неработало, только с номером который я вписывал. Сегодня вбил другой номер и всё ок! :) :)
     
    2 people like this.
  19. KrafT

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

    Joined:
    29 Nov 2004
    Messages:
    62
    Likes Received:
    2
    Reputations:
    0
    Есть файл. Там много мусора, но мне с етого файла надо отпарсить IDшники.. ID вигледит так uid="4552312312321" как зделать чтоб скрипт нашёл IDшники и записал их в файл?
     
  20. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    php.net/preg_match_all
    #uid="[0-9]+"#
     
Thread Status:
Not open for further replies.