[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
    Да
     
  2. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Вроде бы есть класс для работы с mrim на php, у меня нет сейчас времени смотреть, как конкретно отсылаются пакеты. Возможно, легче реализовать получение контакт-листа не через веб-агент (описание протокола есть тут: http://agent.mail.ru/ru/developers/protocol.html).
     
    1 person likes this.
  3. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Например, можно тут (http://gibs0n.name/mainpage/view/article/Описание+протокола+Mail.Ru+агента) почитать
     
  4. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Все-таки сделал
    PHP:
    <?php
    $login
    ='мыло';
    $pass='пасс';
    $pr='';$pp=''//адрес прокси и порт, если надо

    $res=socket_do('win.mail.ru','/cgi-bin/loginagent','','GET','','',0,$pr,$pp);
    preg_match_all('/Set-Cookie: (.+);/iUs',$res,$cook);
    foreach(
    $cook[1] as $ck)
    {
      
    $cookies[]=$ck;
    }

    $tmpcookie=implode('; ',array_unique($cookies));

    $res=socket_do('koi.mail.ru','/cgi-bin/auth',"page=http%3A%2F%2Fwmrim.mail.ru%2Fwin%2Fcontactlist.html&FailPage=http%3A%2F%2Fwin.mail.ru%2Fcgi-bin%2Floginagent&post=&login_from=&Login=$login&Domain=$domain&Password=$pass&level=1&x=11&y=12",'POST',$tmpcookie,'http://win.mail.ru/cgi-bin/loginagent',0,$pr,$pp);

    preg_match_all('/Set-Cookie: (.+);/iUs',$res,$cook);
    foreach(
    $cook[1] as $ck)
    {
      
    $cookies[]=$ck;
    }

    $cookies=implode('; ',array_unique($cookies));

    preg_match("/Location: http:\/\/koi\.mail\.ru\/cgi\-bin\/checkcookie\?(.+)\r\n/iUs",$res,$m);

    if(!isset(
    $m[1]))
      die(
    "Ошибка при входе.");

    $res=socket_do('koi.mail.ru','/cgi-bin/checkcookie?'.$m[1],'','GET',$cookies,'http://win.mail.ru/cgi-bin/loginagent',0,$pr,$pp);
    preg_match("/Location: (.+)\r\n/iUs",$res,$m);

    if(!isset(
    $m[1]))
      die(
    "Ошибка при входе.");

    $tmp=explode('/',$m[1],4);

    $res=socket_do('wmrim.mail.ru','/'.$tmp[3],'','GET',$cookies,'http://win.mail.ru/cgi-bin/loginagent',0,$pr,$pp);

    $sock=@socket_create(AF_INET,SOCK_STREAM,SOL_TCP);

    if(!
    $sock)
      die(
    "Ошибка при создании сокета.");

    if(
    $pr)
    {
      @
    socket_connect($sock,$pr,$pp) or die("Ошибка при работе с сокетами.");
      
    $request "POST http://wmrim.mail.ru/connect HTTP/1.0\r\n";
    }
    else
    {
      
    $mip=@gethostbyname('wmrim.mail.ru');
      @
    socket_connect($sock,$mip,"80") or die("Ошибка при работе с сокетами.");
      
    $request "POST /connect HTTP/1.0\r\n";
    }

    @
    socket_set_nonblock($sock) or die("Ошибка при работе с сокетами.");
    if(@
    socket_select($r null$w = array($sock), $f null5)!=1)
      die(
    "Ошибка при работе с сокетами.");

    $request.= "Host: wmrim.mail.ru\r\n";
    $request.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";
    $request.= "Referer: {$m[1]}\r\n";
    $request.= "Content-Type: application/xml\r\n";
    $request.= "Content-Length: ".strlen('status=1')."\r\n";
    $request.= "Connection: keep-alive\r\n";
    $request.= "Keep-alive: 300\r\n";
    $request.= "Cookie: $cookies\r\n";
    $request.= "\r\n";

    @
    socket_write($sock,$request.'status=1') or die("Ошибка при работе с сокетами.");

    if(@
    socket_select($r = array($sock), $w null$f null5)!=1)
      die(
    "Ошибка при работе с сокетами.");

    $ret=@socket_read($sock,1000) or die("Ошибка при работе с сокетами.");

    if(
    strpos($ret,"MRIM_CS_LOGIN_REJ, {reason:\"Invalid session\"}")!==false)
    {
      @
    socket_close($sock);
      die(
    "Ошибка авторизации в mail-агенте.");
    }

    if(@
    socket_select($r = array($sock), $w null$f null5)!=1)
      die(
    "Ошибка при работе с сокетами.");

    $ret=@socket_read($sock,100000) or die("Ошибка при работе с сокетами.");
    print 
    htmlspecialchars($ret); //вот отсюда брать контакт-лист
    @socket_close($sock);
    usleep($wt*1000);


    function 
    socket_do($page,$suri,$data,$method,$cook,$ref,$close=0,$pr='',$pp=0)
    {
      if(
    $pr)
      {
        
    $request="$method http://$page$suri HTTP/1.0\r\n";
        
    $fp=fsockopen("tcp://".$pr,$pp,$errno,$errstr,30);
      }
      else
      {
        
    $request "$method $suri HTTP/1.0\r\n";
        
    $fp=fsockopen('tcp://'.$page,80,$errorNumber,$errorString,30);
      }

      if(!
    $fp) die("Ошибка при работе с сокетами.");

      @
    stream_set_timeout($fp,30);

      
    $request.= "Host: $page\r\n";
      
    $request.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0\r\n";
      if(
    $ref$request.= "Referer: $ref\r\n";

      if(
    $method=='POST')
      {
        
    $request.= "Content-Type: application/x-www-form-urlencoded\r\n";
        
    $request.= "Content-Length: ".strlen($data)."\r\n";
      }

      
    $request.= "Connection: close\r\n";

      if(
    $cook)
        
    $request.="Cookie: $cook\r\n";

      
    $request.="\r\n";
      
    $request.=$data;

      
    fputs($fp,$request);
        
      
    $res="";

      while(!
    feof($fp))
      {
        
    $res.=fgets($fp,128);
        if(
    $close) break;
      }

      
    fclose($fp);

      return 
    $res;
    }
    ?>
    Из того, что в конце получает скрипт, несложно получить и контакт-лист.
    PS. На денвере работать не будет.
     
    1 person likes this.
  5. diznt

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

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    У меня слишком много результатов вывода из Mysql
    Я хотел бы их по страницам разбить (выводы)

    Как это сделать?
     
  6. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    PHP:
    <?php
       $min 
    0;
       
    $max 25;

       
       for (
    $i 1$i 12$i++)
       {    
        for(
    $j $min$j $max$j++)
        {
            
    $e .= "num: ".$j."\n";    
        }
        
    $min += $max;
        
    $max += $max;
       } 
       echo 
    $e."\n"
    ?> 
    В чем трабла, цыкл доходит до 99, и начинается с 175, в идеале должен дойти 299, прибавляя за итерацию 25.
     
  7. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    тем не менее, а проблема не решина.
     
  8. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    PHP:
    for($i=0;$i<=299;$i+=25)
      print 
    $i.'<br>';
     
    1 person likes this.
  9. Chrek625

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

    Joined:
    6 Jun 2006
    Messages:
    143
    Likes Received:
    13
    Reputations:
    -7
    Доброго времени суток. подскажите есть ли какая то фуркция для того чтоб перевернуть строку в пхп тоесть данная к примеру строка 1234567 а надо получить 7654321.
     
  10. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    http://ru2.php.net/manual/ru/function.strrev.php
     
    1 person likes this.
  11. diznt

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

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    <html>
    <body>
    <?php
    $i = 1;
    if ($i == 1){
    echo "Пыщь";
    die();
    }
    echo "Пыщь2222";
    ?>
    <br>
    <br>
    <?php
    echo "ы";
    ?>
    </body>
    </html>

    Собственно "ы" должно еще высветиться
    Но как сделать чтобы оно высветилось когда до него есть die() (в if'е) ?
    die() нельзя убирать
     
    #10511 diznt, 18 Jun 2009
    Last edited: 18 Jun 2009
  12. 159932

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

    Joined:
    28 Sep 2007
    Messages:
    587
    Likes Received:
    462
    Reputations:
    5
    никак
     
    2 people like this.
  13. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Зачем это делать? После die скрипт не выполняется в любом случае.
    Перед самым выходом неявно можно так, но это все равно не после die )
    PHP:
    <?php
    class test
    {
      function 
    __destruct()
      {
        print 
    "ы";
      }
    }

    $a=new test;
    die();
    ?>
     
    2 people like this.
  14. diznt

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

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    m0Hze так не идет... "Ы" должно после "пыщь2222" выводиться

    159932 что мне тогда делать? в таблице у меня основной код а я хотел бы еще снизу поставить текст который вызывается из настроек (-> из php файла)
     
  15. 159932

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

    Joined:
    28 Sep 2007
    Messages:
    587
    Likes Received:
    462
    Reputations:
    5
    как уже сказал диикс, после дай'а ничего не будет..
    ты про if/else слышал? хули на елсе не сделать?
     
  16. diznt

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

    Joined:
    31 Jan 2008
    Messages:
    432
    Likes Received:
    164
    Reputations:
    -19
    да все все не ругайся :D
    Уже все понял (просто код лень переписывать вот и спросил)
     
  17. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    Возможно я не правильно вырозился, мне нужно чтоб за интерацию первого цыкла, второй цыкл проганял 25 интераций и так 12 раз. должно получится 1-299 по 25 за интерацию первого цыкла.
     
  18. neval

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

    Joined:
    13 Dec 2006
    Messages:
    457
    Likes Received:
    116
    Reputations:
    23
    PHP:
    <?php
       $min 
    0;
       
    $max 25;
       
    $step 25;

        for (
    $i 0$i 12$i++){
            for(
    $j $min$j $max$j++){
            echo 
    $j."\n";
        }
        
    $min += $step;
        
    $max += $step;
        }
    ?>
     
  19. neval

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

    Joined:
    13 Dec 2006
    Messages:
    457
    Likes Received:
    116
    Reputations:
    23
    Или покороче:

    PHP:
    <?php
       $max 
    25;
       
    $step 25;

        for (
    $i 0$i 12$i++,$min+=$step,$max+=$step){
            for(
    $j $min$j $max$j++){
            echo 
    "num: ".$j."\n";
            }
        }
    ?>
     
  20. shellz[21h]

    shellz[21h] Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    311
    Likes Received:
    68
    Reputations:
    6
    благодарю..
     
Thread Status:
Not open for further replies.