проблема с curl: Couldn't resolve host

solaris

Новичок
проблема с curl: Couldn't resolve host

Добрый день!
Есть небольшой класс(connect.class.php):
вот его часть имеющая отношение с curl
PHP:
class connect
{
...........
 function init($timeout,$proxy,$referer)
 {
  $this->timeout=$timeout;
  $this->referer=$referer;
  $this->curlInit($timeout,$referer);
  if($proxy) $this->proxyInit();
 }
 
 
 function go($url)
 {
  curl_setopt($this->curl,CURLOPT_USERAGENT,$this->userAgents[array_rand($this->userAgents)]);
  curl_setopt($this->curl, CURLOPT_URL, $url);
  if($this->useProxy) { curl_setopt($this->curl,CURLOPT_PROXY,$this->proxys[array_rand($this->proxys)]); curl_exec($this->curl);} 
  $page=curl_exec($this->curl);
  echo curl_error($this->curl);
  return $page;
 } 
 
 
 function curlInit($timeout,$referer)
 {
  $this->curl=curl_init();
  curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION,1);
  curl_setopt($this->curl, CURLOPT_TIMEOUT,$timeout);
  curl_setopt($this->curl, CURLOPT_REFERER,$referer);
  curl_setopt($this->curl, CURLOPT_HEADER, 0);
  curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
 }
........
использую я его следущим образом(action.php):
PHP:
<?php
 require_once('./classes/connect.class.php');
if($_POST['pages'])
{
 $pagess=explode("\n",$_POST['pages']);
 $con=new connect();
 $con->init(50,false,"http://www.yandex.ru");
 foreach($pagess as $key => $address)
 {
   if(!eregi("http://",$address)) $address="http://".$address;
   $res=$con->go($address);
   echo $res;
  }
}
?>
pages передаются из textarea стартовой формы... пишем туда адреса страниц, каждый на новой строчке....

Проблема заключается в следующем: почему-то открывается всегда, только последний введенный адрес,например:
ввожу в textarea:
php.net
yandex.ru
google.com
отправляю данные скрипту action.php, он в свою очередь выводит страницу гугла и ошибки:
Couldn't resolve host 'php.net 'Couldn't resolve host 'yandex.ru '

Подскажите, пожалуйста, что я делаю не так? замучился уже :((((((
 

kode

never knows best
Мммм....rtfdm ?

PHP:
 require_once('./classes/connect.class.php'); 
if($_POST['pages']) 
{ 
 $pagess=explode("\n",$_POST['pages']); 
 $con=new connect(); 
 $con->init(50,false,"http://www.yandex.ru"); 
 foreach($pagess as $key => $address) 
 { 
   if(!eregi("http://",$address)) $address="http://".$address; 
   echo $address; //--- давай посмотрим что у тебя как адресс передаётся
   $res=$con->go($address); 
   echo $res; 
   //и попробуй это
   sleep(1);
  } 
}
и ещё попробуй переинизиализировать (те curl_close, curl_init) curl после каждого curl_exec
 

kode

never knows best
небольшой пример:

PHP:
<?php
// create both cURL resources
$ch1 = curl_init();
$ch2 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.google.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

//create the multiple cURL handle
$mh = curl_multi_init();

//add the two handles
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$running=null;
//execute the handles
do {
    curl_multi_exec($mh,$running);
} while ($running > 0);
//close the handles
curl_multi_remove_handle($mh,$ch1);
curl_multi_remove_handle($mh,$ch1);
curl_multi_close($mh);

?>
 

solaris

Новичок
с днс все нормально, в чем легко убедиться, поменяв местами урл...допустим так:

php.net
google.com
yandex.ru

в ответ получаем:



http://php.net
Couldn't resolve host 'php.net '
http://google.com
Couldn't resolve host 'google.com'
http://yandex.ru

и страницу яндекса ниже....
а curl_multi_exec так этож ток пхп 5 :(((((
неужели задуманное мною невозможно осуществить на пхп4???
задача вродеб не сложная....
но решить её самостоятельно увы не могу:(((
ввиду отсутствия опыта работы с curl ....
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Проблемы возникают как с www и без?

Трейсануть
php.net
и
www.php.net
пробовали?
Попробуйте.

Возможно в этом причина.
 

solaris

Новичок
PHP:
bash-3.1# traceroute php.net
traceroute to php.net (69.147.83.197), 30 hops max, 38 byte packets
...................
10  if-13-0-0-722.core3.AEQ-Ashburn.teleglobe.net (216.6.51.21)  157.472 ms  148.716 ms  148.161 ms
11  ix-3-0-9.core3.AEQ-Ashburn.teleglobe.net (216.6.51.30)  136.534 ms  136.316 ms  136.389 ms
..........................
13  g-0-0-0-p150.msr2.sp1.yahoo.com (216.115.107.73)  212.171 ms g-0-0-0-p140.msr1.sp1.yahoo.com (216.115.107.49)  212.715 ms g-1-0-0-p150.msr2.sp1.yahoo.com (216.115.107.77)  212.150 ms
14  ge-1-41.bas-b2.sp1.yahoo.com (209.131.32.33)  212.483 ms ge-1-41.bas-b1.sp1.yahoo.com (209.131.32.25)  213.592 ms ge-1-46.bas-b2.sp1.yahoo.com (209.131.32.51)  212.180 ms
15  y2.php.net (69.147.83.197)  215.136 ms  212.235 ms  212.398 m
bash-3.1#
примерно тоже самое и с www.
ды говорю, нормально все с ДНс....
это увидеть можно поменяв порядок урлов...
открывается только последний:(((
уже бьюсь головой об стенку..... ничего не понимаю:((((
 

kode

never knows best
вот за 15 минут набросал, не тестил - PHP без curl на девном серваке :( Теоретически работать должен :)

PHP:
<?php

class cUrl{
	private $curl_handler;

	private $referer;
	private $timeout;

	public $url;
	public $last_error;
	public $result;

	public function __construct($url,$referer="",$timeout=10){
		$this->url = (!eregi("http://",$url))?"http://{$url}":$url;
		$this->referer = $referer;
		$this->timeout = $timeout;

		$this->curl_handler = curl_init($url);
		$this->setDefaultOpts();
	}

	public function setDefaultOpts(){
		$this->setOpt(CURLOPT_FOLLOWLOCATION,1);
		$this->setOpt(CURLOPT_TIMEOUT,$this->timeout);
		if($this->referer) $this->setOpt(CURLOPT_REFERER,$this->referer);
		$this->setOpt(CURLOPT_HEADER, 0);
		$this->setOpt(CURLOPT_RETURNTRANSFER, 1);
	}

	public function setOpt($var,$value){
		return curl_setopt($this->curl_handler,$var,$value);
	}

	public function getHandler(){
		return $this->curl_handler;
	}

	public function exec(){
		$this->result = curl_exec($this->curl_handler);

		if($this->last_error = curl_error($this->curl_handler)){
			throw new Exception($this->last_error);
		}

		return $this->result;
	}

	public function __destruct(){
		curl_close($this->curl_handler);
	}
}

class cUrlManager{
	private $cUrls;
	public $result;
	
	public function __construct($input,$delmiter){
		$urls = explode($delmiter,$input);
		foreach ($urls as $url) {
			$this->addUrl($url);
		}
	}

	public function addUrl($url,$referer=""){
		if(!$url)
			return false;
			
		$new_cUrl = new cUrl($url,$referer);
		$this->acurls[$url] = $new_cUrl;
	}

	public function exec(){
		$this->result = array();
		foreach ($this->cUrls as $url=>$curl) {
			$this->result[$url] = $curl->exec();
		}

		return $this->result;
	}

}



$_POST['pages'] = "php.net\nyandex.ru\ngoogle.com\n";

if(isset($_POST['pages'])){
	$curl_manager = new cUrlManager($_POST['pages'],'\n');
                print_r($curl_manager->exec());
}

?>
-~{}~ 18.12.07 13:08:

Блин, стоп - написал бы сразу что для PHP4 :)

тогда:
1)
и ещё попробуй переинизиализировать (те curl_close, curl_init) curl после каждого curl_exec
2) Переделай вышенаписанные классы для работы с PHP4 :))) Ничего сложного :)
 

solaris

Новичок
добавил следующее:


$url=str_replace("\r","",$url);
$url=trim($url);

помоглось:)))))))
всем,спасибо:)
 
Сверху