цикл for, нужа помощь

Статус
В этой теме нельзя размещать новые ответы.

magiq

Новичок
цикл for, нужа помощь

Вопрос по циклам.
PHP:
for($j=0;$j<$min;$j++)
{
	for($i=0;$i<count($file['proxy']);$i++)
	{
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL,$server); // открываемая страница
		curl_setopt($ch, CURLOPT_PROXY, $file['proxy'][$i]); //Берем рандомное прокси
		curl_setopt($ch, CURLOPT_TIMEOUT, 20); // сколько времени ждать ответа от сервера
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // вернуть ответ сервера в переменную, а не выводить
		curl_setopt($ch,CURLOPT_USERAGENT,$agent);
		curl_setopt($ch,CURLOPT_HEADER,1);
		// Если не работает proxy - переходим к следующему
		if (!$page = curl_exec($ch)) {
			$fp= fopen($bad,'a');
			fwrite($fp,$file['url'][$j].' : proxy error\n');
			fclose($fp);
			echo 'Curl error'.$i.'+'.$j;
			continue;
		}
		curl_close($ch);

		//Получаем ссылку картинки
		$pattern= '/<IMG src="\/cgi-bin\/addsite.cgi\?captcha_picture=(.*)" alt="Случайный текст">/';
		preg_match($pattern,$page,$link);
		//Затем грабим ID картинки
		$pattern= '/http:\/\/id\.rambler\.ru\/captcha\/([^\.]*)/';
		preg_match($pattern,$link[1],$id);
		//Грабим кукисы страницы
		$pattern= '/Set-Cookie: ruid=([^;]*)/';
		preg_match($pattern,$page,$ruid);
		unset($pattern);

		// Сохраняем картинку
		saveimg($link[1]);
		// Читаем капчу
		if (!$text=recognize('img/temp.jpg',"idididas",true)) { continue; }
		$string= 'keywords=&submit_endeavoured=Yes&title='.urlencode($file['titles'][$j]).'&url='.urlencode($file['url'][$j]).'&comments='.urlencode($file['descr'][$j]).'&contact='.urlencode($file['names'][$j]).'&email='.urlencode($file['emails'][$j]).'&captcha_request='.urlencode($id[1]).'&captcha_response='.urlencode($text);
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL,$server); // открываемая страница
		curl_setopt($ch, CURLOPT_PROXY, $file['proxy'][$i]); //Берем рандомное прокси
		curl_setopt($ch, CURLOPT_COOKIE,'ruid='.$ruid[1].'; path=/; domain=.rambler.ru; expires=Thu, 06-Jun-19 17:21:43 GMT');
		curl_setopt($ch,CURLOPT_USERAGENT,$agent);
		curl_setopt($ch, CURLOPT_TIMEOUT, 20);
		curl_setopt($ch,CURLOPT_POST,1);
		curl_setopt($ch,CURLOPT_POSTFIELDS,$string);
		curl_setopt($ch,CURLOPT_HEADER,1);
		if (!$page = curl_exec($ch)) {
			$fp= fopen($bad,'a');
				fwrite($fp,$file['url'][$i].' : proxy error\n');
			fclose($fp);
			echo 'Curl error'.$i.'+'.$j;
			continue;
		}
		curl_close($ch); // освободим ресурсы
		$pattern='/<font color="#dd0000">(.*)<\/font>/';
		if(preg_match($pattern,$page,$matches))
		{
			$fp= fopen($bad,'a');
			fwrite($fp,$file['url'][$i].' :'.$matches[1].'\n');
			fclose($fp);
			echo $matches[1].$i.'+'.$j;
			continue(2);
		}
		$fp= fopen($succes,'a');
		fwrite($fp,$file['url'][$i].'\n');
		fclose($fp);
		echo 'Succes!!'.$i.'+'.$j;
		coninue(2);
	}
}
Необходимо чтобы когда происходит proxy ошибка, цикл $i повторялся вновь, когда же цикл $i доходит до конца, наращивался цикл $j
Напутал много, не могу разобраться

-~{}~ 09.06.09 01:49:

цикл J перебирает данные, цикл I переберает прокси сервера

-~{}~ 09.06.09 01:51:

В этом
PHP:
$pattern='/<font color="#dd0000">(.*)<\/font>/';
Содержется ответа сервера с ошибкой, необходимо чтобы после ответа наращивался цикл J.
Когда происходят curl ошибки, наращивался цикл I
Когда Ошибок не обнаружено например
PHP:
echo 'Succes!!'.$i.'+'.$j;
цикл J наращивался. То есть прокси сервера меняется только когда curl выводит ошибку.
На $i.'+'.$j - не обращайте внимание, дебаг тул.
 

magiq

Новичок
Автор оригинала: triumvirat
ага, все тут же кинулись разбирать твой код на 70 строк
ты присмотрись, мне главное цикл правильно заставить работать, остальное все работает

-~{}~ 09.06.09 02:06:

Алгоритм такой
Скрипт заходит 1 раз, парсит кукисы и капчу. Второй раз он вводит данные. Так вот надо чтоб он перебирал прокси сервера и данные в зависимости от ситуации. Если ошибка curl - перебераем прокси($i), остальное - перебираем данные($j)
Особая путаница с break continue
Ах да, случае успеха или ошибки он это зиписывает
 

dimagolov

Новичок
он там еще капчи распознавать пытается.
ща тема закроется за нарушение правил.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху