_endrju_, разбить массив по три элемента и вызывать кусками. до компа дойду и пример напишу
_endrju_, ну там не обмануть, там по принципу !eof
чуть позже доберусь до компа. с работы только пригнал
хм попробую ) пока ты до компа идешь) идея не плохая)
_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);
и подумл что это хорошее решение хотя потерял в сорости ииза етого
_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
если я правильно понял в класе ты не ипользовал мультикурл? поетомумедленнее?