Сегодня хочу поделиться с Вами, мои дорогие читатели, своим классом для работы с 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 );

 

С такой работой мне совсем скоро понадобиться консультация психолога 🙂

Подписываемся на обновления блога по Email:

Введите адрес электронной почты



Метки: , ,

Оставьте свой комментарий