Сегодня хочу поделиться с Вами, мои дорогие читатели, своим классом для работы с MultiCurl. Класс был написан для того же проекта, для которого я писал демона.
Сам класс mcurl.class.php
<?php
class MCurl
{
protected $_urls;
protected $_result;
protected $_timeout;
public function __construct($timeout = 5, $urls = false)
{
$this->_timeout = $timeout;
$this->_urls = $urls ? $urls : array();
$this->_result = array();
}
public function setTimeout($timeout)
{
$this->_timeout = $timeout;
}
public function setUrls($urls)
{
$this->_urls = $urls;
}
public function getResults()
{
if(!$this->_result) $this->scan();
return $this->_result;
}
public function scan()
{
$curl = array();
$mh = curl_multi_init();
foreach ($this->_urls as $id => $url)
{
$curl[$id] = curl_init();
curl_setopt($curl[$id], CURLOPT_URL, $url);
curl_setopt($curl[$id], CURLOPT_HEADER, 0);
curl_setopt($curl[$id], CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl[$id], CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($curl[$id], CURLOPT_FOLLOWLOCATION, true);
curl_multi_add_handle($mh, $curl[$id]);
}
$running = null;
do curl_multi_exec($mh, $running);
while($running > 0);
foreach($curl as $id => $c)
{
$this->_result[$id] = curl_multi_getcontent($c);
curl_multi_remove_handle($mh, $c);
}
curl_multi_close($mh);
}
}
Использование:
<?php
require_once('mcurl.class.php');
$urls = array(
'https://felix90.ru',
'http://ya.ru',
'http://google.com'
);
$mcurl = new MCurl();
$mcurl->setTimeout(5);
$mcurl->setUrls($urls);
$mcurl->scan();
$result = $mcurl->getResults();
var_export( $result );
Сокращённое использование:
<?php
require_once('mcurl.class.php');
$urls = array(
'https://felix90.ru',
'http://ya.ru',
'http://google.com'
);
$mcurl = new MCurl(5, $urls);
$result = $mcurl->getResults();
var_export( $result );
С такой работой мне совсем скоро понадобиться консультация психолога 🙂