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

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

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

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    qaz
    PHP:
    $ch curl_init('http://site.ru');//сайт, куда редиректить
    curl_setopt($chCURLOPT_REFERER'http://referer.fuck');//реферер
    curl_exec($ch);
     
  2. Fuckel

    Fuckel Banned

    Joined:
    16 Jan 2008
    Messages:
    274
    Likes Received:
    59
    Reputations:
    6
    А где здесь переадресация?
     
  3. AnGeI

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

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    непонятки с declare.
    http://php.net/manual/ru/control-structures.declare.php
    PHP:
    <?php

    declare(ticks=1);

    // A function called on each tick event
    function tick_handler()
    {
        echo 
    "tick_handler() called\n";
    }

    register_tick_function('tick_handler');

    $a 1;

    if (
    $a 0) {
        
    $a += 2;
        print(
    $a);
    }

    ?>

    Output:
    tick_handler() called
    tick_handler() called
    tick_handler() called
    3tick_handler() called
    tick_handler() called
    tick_handler() called
    tick_handler() called
    Что значит ticks=1?
     
  4. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    да, меня тоже ето интерисует, мб я чегото недопонял?
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    AnGeI что именно вам непонятно? ticks=1 устанавливает директиву ticks в единицу. Что такое тик - написано на странице мануала

    qaz перенаправить пользователя с чужим реферером - никак, с отсутствующим - например HTTP редирект.

    Если нужно сделать запрос к странице от лица сервера - то правильно советуют CURLOPT_REFERER
     
    _________________________
  6. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    qaz хочет сделать не запрос, а переадресацию.
     
  7. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    тогда JS-ом вообще без реферера, как тут на античате:
    Code:
    //############################3
    // Открытие ссылки без реферера
    function openEx(url)
    {
      w = window.open();
      w.document.write('<meta http-equiv="refresh" content="0;url='+url+'">');
      w.document.close();
      return false;
    }
    
     
    1 person likes this.
  8. AnGeI

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

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Сама суть понятна, только непонятно какие именно события "tickable", в мануале написано:
    Т.е. структуры типа if/switch/goto, их условия и их инструкции не являются tickable?
    Как не пробовал, не мог насчитать в примере столько вызовов tick_handler();
    PHP:
    <?php

    declare(ticks=1);

    // A function called on each tick event
    function tick_handler()
    {
        echo 
    "tick_handler() called<br>";
    }

    register_tick_function('tick_handler');

    $a 1;
    //тут
    if ($a ) { // тут
        
    $a += 2;  // тут
        
    print($a); // print 3;
    //тут
    }
    // и еще где-то 3 раза
    ?>
     
  9. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    AnGeI Попробуйте посмотреть это http://php.net/manual/en/internals2.opcodes.ticks.php а также http://www.php.net/manual/en/internals2.opcodes.php и модуль, который там советуют
     
    _________________________
  10. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    dell///
     
    #18850 Nelz., 21 Jul 2011
    Last edited: 23 Jul 2011
  11. NeW

    NeW New Member

    Joined:
    9 Feb 2011
    Messages:
    50
    Likes Received:
    0
    Reputations:
    0
    PHP:
    <?php
    $socket 
    fsockopen('www.example.loc'80$errno$errstr30);
    if(!
    $socket)die("$errstr($errno)");
    $data "name=".urlencode("John")."&surname=".urlencode("Smith");
    fwrite($socket"POST /post/test.php HTTP/1.1\r\n");
    //а также имя хоста
    fwrite($socket"Host: www.example.loc\r\n");
    //Content-type должен быть applicaion/x-www-form-urlencoded
    fwrite($socket,"Content-type: application/x-www-form-urlencoded\r\n");
    Content-length
    fwrite
    ($socket,"Content-length:".strlen($data)."\r\n");
    fwrite($socket,"Accept:*/*\r\n");
    fwrite($socket,"User-agent:Opera 10.00\r\n");
    fwrite($socket,"\r\n");
    fwrite($socket,"$data\r\n");
    fwrite($socket,"\r\n");
    $answer '';
    while(!
    feof($socket)){
        
    $answer.= fgets($socket4096);
    }
    echo 
    $answer;
    fclose($socket);
    ?>
    Что за точка в $answer.= fgets($socket, 4096); Без нее не работает.
     
  12. Skofield

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

    Joined:
    27 Aug 2008
    Messages:
    960
    Likes Received:
    392
    Reputations:
    58
    NeW, это оператор конкатенации.
    http://php.su/learnphp/operators/?string
     
    #18852 Skofield, 22 Jul 2011
    Last edited: 22 Jul 2011
  13. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    Всем привет, у меня взникла пролемка
    нужно при помощи курла авторизоватся тут http://www.wmraskrutim.ru/
    но проблема в том што там капча, как быть?

    я сделал так

    первый файл ето какбы сама форма
    PHP:
    <?PHP
    $cur
    =curl_init();    
    curl_setopt($curCURLOPT_URL,'http://www.wmraskrutim.ru/'); 
    curl_setopt($cur,CURLOPT_USERAGENT,"Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.8.131 Version/11.10"); 

    curl_setopt($cur,CURLOPT_COOKIEJAR,'cookie.txt');    

    curl_setopt($cur,CURLOPT_COOKIEFILE,'cookie.txt');   
    curl_setopt($cur,CURLOPT_RETURNTRANSFER,1);    
    $doc curl_exec($cur);
    curl_close($cur);
    preg_match("/<input type=hidden name=\"PHPSESSID\"(.*?)<\/td>/"$doc,$a);
    $s preg_replace("/src=\"/is","src=\"http://www.wmraskrutim.ru",$a[0]); 



    ?>
    <form action="go.php" method ="post">
    Вход в Аккаунт
    <br>
     E-mail
    <br>
    <input type="hidden" name="form" value="sent">
      <input type="text" name="email" maxlength="30" value="" >
    <br>
               Пароль:

    <br>
          <input type="password" name="passwd" maxlength="30" value="" >
    <br>
      Код #:         
    <br>
    <?

    echo $s;

    ?>
    <br>
    <input type="submit" name="go">
    </form>
    <?
    ?>


    и второй обраотчик авторизатор

    PHP:
    <?PHP
    $eemail 
    = !empty($_POST['email'])?$_POST['email']:NULL;
    $ppasswd = !empty($_POST['passwd'])?$_POST['passwd']:NULL;
    $ccode = !empty($_POST['code'])?$_POST['code']:NULL
    $fform = !empty($_POST['form'])?$_POST['form']:NULL;
    $ses = !empty($_POST['PHPSESSID'])?$_POST['PHPSESSID']:NULL;



    $post "form=".$fform."&email=".$eemail."&passwd=".$ppasswd."&code=".$ccode."&PHPSESSID=".$ses;
     
    $ch curl_init();   
    curl_setopt($chCURLOPT_URL,'http://www.wmraskrutim.ru/members/mem_auth.php');  
    curl_setopt($chCURLOPT_FAILONERROR1);  
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);  
    curl_setopt($ch,CURLOPT_COOKIEJAR,'cookie.txt');    
    curl_setopt($ch,CURLOPT_COOKIEFILE,'cookie.txt');   
    curl_setopt($chCURLOPT_POSTtrue);   
    curl_setopt($chCURLOPT_POSTFIELDS$post);   
     
    $ex curl_exec($ch);   
    curl_close($ch); 

    $aaa iconv("windows-1251""UTF-8"$ex);
    echo 
    $aaa;
    ?>





    но постоянно пишет што код капчи введён неправильно, как быть?
     
    #18853 qaz, 22 Jul 2011
    Last edited: 22 Jul 2011
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    qaz первый скрипт не сохраняет кукисы, плюс все обращения к файлу капчи должны быть строго от лица скрипта, то есть файл капчи нужно скачивать, а не показывать с чужого сайта.
     
    _________________________
  15. qaz

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

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    в смысле скачивать? а как мне скачать и отправить от лица скрипта? я немного непонял как ето осуществить :(
     
  16. Hixon

    Hixon Member

    Joined:
    17 Apr 2010
    Messages:
    88
    Likes Received:
    9
    Reputations:
    0
    Работаю в первый раз с курлом, поэтому появился вопрос, который я не знаю как решить, не используя сторонние средства.
    Как узнать, какие заголовки отправляются на сервер?
    Что-то почитал я о курле, в голове - каша.
    PHP:
    $headers = array
        (
            
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n',
            
    'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\n',
            
    'Accept-Encoding: gzip, deflate\r\n',
            
    'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\n',
            
    'Referer: http:site.fm/user/abc\r\n',
            
    'POST /user/new HTTP/1.1\r\n',
            
    'Host: site.fm\r\n',
            
    'Content-Type: application/x-www-form-urlencoded\r\n',
            
    'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0\r\n',
            
    'Connection: close\r\n\r\n'
        
    ); 
        
    curl_setopt($chCURLOPT_HTTPHEADER,$headers);
    Вот так мы отправляем заголовки, верно? Или тут не нужно следовать правилам, что конец заголовков - два \r\n?
    Это касается ответа сервера, верно?

    Заголовок Content-Type: application/x-www-form-urlencoded эквивалентен
    PHP:
    curl_setopt($chCURLOPT_POST1);
    ?



    Отправляю заголовки так, как написал выше, появляется ошибка
    Что за кодировка, не пойму. Если удалить отправку заголовков, то все хорошо работает, но я, может быть, хочу отправить их, почему ошибка?
     
    #18856 Hixon, 23 Jul 2011
    Last edited: 23 Jul 2011
  17. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    мне кто нит поможет? :(

    дык
     
  18. Hixon

    Hixon Member

    Joined:
    17 Apr 2010
    Messages:
    88
    Likes Received:
    9
    Reputations:
    0
    Спасибо, заголовки выводятся, но в чём может быть проблема?
    PHP:
    HTTP/1.1 100 Continue

    HTTP/1.1 200 OK
    Server
    nginx/0.8.34
    Date
    Fri22 Jul 2011 21:12:42 GMT
    Content
    -Typetext/htmlcharset=UTF-8
    Transfer
    -Encodingchunked
    Connection
    close
    X
    -Powered-ByPHP/5.2.12
    Set
    -CookiePHPSESSID=8e7d2235bcd03cb77c1167b1cc1e6592path=/
    ExpiresThu19 Nov 1981 08:52:00 GMT
    Cache
    -Controlno-storeno-cachemust-revalidatepost-check=0pre-check=0
    Pragma
    no-cache
     
  19. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Nelz. переформулируйте вопрос, вас невозможно понять. Что именно не работает, как не работает, где не работает, что выводится вместо того, что должно?

    Hixon проблема в том, что не все заголовки одинаково полезны. Рекомендую изучить, что каждый из них значит. Строка с "кракозябрами" возвращается вам из-за того, что вы устанавливаете заголовок Accept-Encoding не уведомляя об этом курл.

    Также рекомендую прочитать, как следует работать с курлом - большинство стандартных заголовков должны устанавливаться с помощью опций курла, а именно функцией curl_setopt.

    qaz вам нужно с помощью скрипта скачивать изображение и показывать его локальную копию, а не подменять ссылку и заставлять браузер обращаться к удаленному серверу
     
    _________________________
    #18859 Gifts, 23 Jul 2011
    Last edited: 23 Jul 2011
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Nelz. начинается... Вначале вы даете один код, потом внезапно выдержку из другого.

    В вашем последнем коде, есть некая переменная $error, которой вы присваиваете значение из рекапчи. Ну так и выводите эту переменную, с веселым транспарантом - "капча введена неправильно". То есть верните то, что у вас было до этого на pastebin
     
    _________________________
    1 person likes this.
Thread Status:
Not open for further replies.