url в url

1.07K
.
(\/)____o_O____(\/)
_endrju_, разбить массив по три элемента и вызывать кусками. до компа дойду и пример напишу
.
(\/)____o_O____(\/)
_endrju_, ну там не обмануть, там по принципу !eof
чуть позже доберусь до компа. с работы только пригнал
.
хм попробую ) пока ты до компа идешь) идея не плохая)
.
Koenig
(\/)____o_O____(\/)
_endrju_, хз, как то так
class Resource
{
    private $data;
    
    private $url;
    
    private $ch;
    
    public function __construct($url, $data) {
        $this->url = $url;
        $this->data = $data;
        $this->createResourse();
    }
    
    public function createResourse() {
        $ch = curl_init($this->url);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_REFERER, $this->url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Linux; Android 6.0.1; D5803 Build/23.5.A.1.291) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36');
        curl_setopt($ch, CURLOPT_ENCODING, 'utf-8');
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 200);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $this->data);
        curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/' . md5($this->url) . '_cookie.txt');
        curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/' . md5($this->url) . '_cookie.txt');
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        if (preg_match('/https:/', $this->url)) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        }
        
        $this->ch = $ch;
    }
    
    public function execute() {
        $data = curl_exec($this->ch);
        curl_close($this->ch);
        return $data;
    }
}

class Crawler
{
    private $resources = [];
    
    public function __construct(array $urls, array $posts) {
        $res = [];
        foreach (range(0, count($urls) - 1) as $key) {
            $res[] = new Resource($urls[$key], $posts[$key]);
        }
        $this->resources = $res;
    }
    
    public function run() {
        return array_map(
            function ($i) {
                sleep(0.35);
                return $i->execute();
            }, $this->resources
        );
    }
}

$urls = ['http://johncms.com', 'https://seclub.org'];
$posts = ['', ''];

$obj = new Crawler($urls, $posts);

echo '<pre>' . print_r(array_map('htmlspecialchars', $obj->run()), 1) . '</pre>';
.
# Koenig (27.05.2017 / 17:16)
_endrju_, хз, как то так

class Resource
{
private $data;

private $url;

private $ch;

public function __construct($url, $data) {
$this->url = $url;
теперь мне ничего не понятно )
.
Добавлено: 27.05.2017 / 17:26
# Koenig (27.05.2017 / 17:16)
_endrju_, хз, как то так

class Resource
{
private $data;

private $url;

private $ch;

public function __construct($url, $data) {
$this->url = $url;
сейчас попробую єтот код, спасибо) но вот как быть с ООП в пыхе, и когда его надо применять мне теперь совсем не понятно )

Добавлено: 27.05.2017 / 17:27
а я просто запихнул в ту функцию
for($y=0;$y<$count_get_multicurl;$y++){
  $urls_output = array_slice($urls,$offset,8,FALSE);

и подумл что это хорошее решение хотя потерял в сорости ииза етого
.
(\/)____o_O____(\/)
_endrju_, ну мне проще так, когда хочешь, тогда и применяешь
.
(\/)____o_O____(\/)
_endrju_, еак ты кусок вырезал из массива же
.
спасибо все работает ) кстати,тот код который я писал работает бытрее но есь одно но, он потребляет больше ОЗУ я так понимаю входе исполнени скрипта я гдето забываю чистить переменные )
.
_endrju_
Добавлено: 27.05.2017 / 20:01
# Koenig (27.05.2017 / 17:32)
_endrju_, еак ты кусок вырезал из массива же
не совсем но это быдло код наверно
function sfdv_multi_curl ($urls,$post_datas){
 
//отримати два массиви $urls, $pos_datas
$mh = curl_multi_init(); 
 $offset = 0;
 $count_get_multicurl = count($urls)/8;
 for($y=0;$y<$count_get_multicurl;$y++){
  $urls_output = array_slice($urls,$offset,8,FALSE);
foreach ($urls_output as $i => $url) { 
   $conn[$i]=curl_init($url); 
   curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1);  //ничего в браузер не давать  
   curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,2); //таймаут соединения  
   curl_setopt($conn[$i], CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 6.1; WOW64; U; ru) Presto/2.10.289 Version/12.01');
   curl_setopt($conn[$i], CURLOPT_POST, 1); // указываем, что у нас POST запрос 
   curl_setopt($conn[$i], CURLOPT_POSTFIELDS, $post_datas[$i+$offset]);// добавляем переменные 
   curl_multi_add_handle ($mh,$conn[$i]); 
} 

do {curl_multi_exec($mh,$active); } while ($active);//Пока все соединения не отработают
 
for ($i=0; $i<count($urls_output); $i++) {
   

   if(sfdv_check_error_execute(json_decode(curl_multi_getcontent($conn[$i]),TRUE))=="OK") {              
   $res[]=json_decode(curl_multi_getcontent($conn[$i]),TRUE);        //ответ сервера в переменную  
   curl_multi_remove_handle($mh,$conn[$i]); 
   curl_close($conn[$i]); 
}else{
	$error = sfdv_check_error_execute(json_decode(curl_multi_getcontent($conn[$i]),TRUE));
	$res= array("error"=>"error","error_msg"=>"Під час виклику функції мультікурл виникла помилка".$error['error_msg']." ");
	break;
}
} 
$offset = $offset+8;
}
curl_multi_close($mh);
return $res;
}


Добавлено: 27.05.2017 / 20:04
если я правильно понял в класе ты не ипользовал мультикурл? поетомумедленнее?
Всего: 50