qaz PHP: $ch = curl_init('http://site.ru');//сайт, куда редиректить curl_setopt($ch, CURLOPT_REFERER, 'http://referer.fuck');//реферер curl_exec($ch);
непонятки с 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?
AnGeI что именно вам непонятно? ticks=1 устанавливает директиву ticks в единицу. Что такое тик - написано на странице мануала qaz перенаправить пользователя с чужим реферером - никак, с отсутствующим - например HTTP редирект. Если нужно сделать запрос к странице от лица сервера - то правильно советуют CURLOPT_REFERER
тогда 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; }
Сама суть понятна, только непонятно какие именно события "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 > 0 ) { // тут $a += 2; // тут print($a); // print 3; //тут } // и еще где-то 3 раза ?>
AnGeI Попробуйте посмотреть это http://php.net/manual/en/internals2.opcodes.ticks.php а также http://www.php.net/manual/en/internals2.opcodes.php и модуль, который там советуют
PHP: <?php $socket = fsockopen('www.example.loc', 80, $errno, $errstr, 30); 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($socket, 4096); } echo $answer; fclose($socket); ?> Что за точка в $answer.= fgets($socket, 4096); Без нее не работает.
Всем привет, у меня взникла пролемка нужно при помощи курла авторизоватся тут http://www.wmraskrutim.ru/ но проблема в том што там капча, как быть? я сделал так первый файл ето какбы сама форма PHP: <?PHP $cur=curl_init(); curl_setopt($cur, CURLOPT_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($ch, CURLOPT_URL,'http://www.wmraskrutim.ru/members/mem_auth.php'); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_COOKIEJAR,'cookie.txt'); curl_setopt($ch,CURLOPT_COOKIEFILE,'cookie.txt'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $ex = curl_exec($ch); curl_close($ch); $aaa = iconv("windows-1251", "UTF-8", $ex); echo $aaa; ?> но постоянно пишет што код капчи введён неправильно, как быть?
qaz первый скрипт не сохраняет кукисы, плюс все обращения к файлу капчи должны быть строго от лица скрипта, то есть файл капчи нужно скачивать, а не показывать с чужого сайта.
в смысле скачивать? а как мне скачать и отправить от лица скрипта? я немного непонял как ето осуществить
Работаю в первый раз с курлом, поэтому появился вопрос, который я не знаю как решить, не используя сторонние средства. Как узнать, какие заголовки отправляются на сервер? Что-то почитал я о курле, в голове - каша. 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($ch, CURLOPT_HTTPHEADER,$headers); Вот так мы отправляем заголовки, верно? Или тут не нужно следовать правилам, что конец заголовков - два \r\n? Это касается ответа сервера, верно? Заголовок Content-Type: application/x-www-form-urlencoded эквивалентен PHP: curl_setopt($ch, CURLOPT_POST, 1); ? Отправляю заголовки так, как написал выше, появляется ошибка Что за кодировка, не пойму. Если удалить отправку заголовков, то все хорошо работает, но я, может быть, хочу отправить их, почему ошибка?
Спасибо, заголовки выводятся, но в чём может быть проблема? PHP: HTTP/1.1 100 Continue HTTP/1.1 200 OK Server: nginx/0.8.34 Date: Fri, 22 Jul 2011 21:12:42 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: close X-Powered-By: PHP/5.2.12 Set-Cookie: PHPSESSID=8e7d2235bcd03cb77c1167b1cc1e6592; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache
Nelz. переформулируйте вопрос, вас невозможно понять. Что именно не работает, как не работает, где не работает, что выводится вместо того, что должно? Hixon проблема в том, что не все заголовки одинаково полезны. Рекомендую изучить, что каждый из них значит. Строка с "кракозябрами" возвращается вам из-за того, что вы устанавливаете заголовок Accept-Encoding не уведомляя об этом курл. Также рекомендую прочитать, как следует работать с курлом - большинство стандартных заголовков должны устанавливаться с помощью опций курла, а именно функцией curl_setopt. qaz вам нужно с помощью скрипта скачивать изображение и показывать его локальную копию, а не подменять ссылку и заставлять браузер обращаться к удаленному серверу
Nelz. начинается... Вначале вы даете один код, потом внезапно выдержку из другого. В вашем последнем коде, есть некая переменная $error, которой вы присваиваете значение из рекапчи. Ну так и выводите эту переменную, с веселым транспарантом - "капча введена неправильно". То есть верните то, что у вас было до этого на pastebin