/**
 * http://techblog.yahoo.co.jp/architecture/api1_curl_multi/
 * 複数URLのコンテンツ、及び通信ステータスを一括取得する。
 * サンプル:
 *   $urls = array( "http://〜", "http://〜", "http://〜" );
 *   $results = getMultiContents($urls);
 *   print_r($results);
 */
function getMultiContents($url_list)
{
    // マルチハンドルの用意
    $mh = curl_multi_init();
    // URLをキーとして、複数のCurlハンドルを入れて保持する配列
    $ch_list = array();
    // Curlハンドルの用意と、マルチハンドルへの登録
    foreach ($url_list as $url) {
        $ch_list[$url] = curl_init($url);
        curl_setopt($ch_list[$url], CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch_list[$url], CURLOPT_TIMEOUT, 1);
        // タイムアウト秒数を指定
        curl_setopt($ch_list[$url], CURLOPT_SSL_VERIFYPEER, false);
        curl_multi_add_handle($mh, $ch_list[$url]);
    }
    // 一括で通信実行、全て終わるのを待つ
    $running = null;
    do {
        curl_multi_exec($mh, $running);
    } while ($running);
    // 実行結果の取得
    foreach ($url_list as $url) {
        // ステータスとコンテンツ内容の取得
        $results[$url] = curl_getinfo($ch_list[$url]);
        $results[$url]["content"] = curl_multi_getcontent($ch_list[$url]);
        // Curlハンドルの後始末
        curl_multi_remove_handle($mh, $ch_list[$url]);
        curl_close($ch_list[$url]);
    }
    // マルチハンドルの後始末
    curl_multi_close($mh);
    // 結果返却
    return $results;
}
 /**
  * Executes a curl request.
  *
  * @param  resource $request
  * @return \Frlnc\Slack\Contracts\Http\Response
  */
 public function executeMultiRequest($multiRequest, $singleRequests)
 {
     $responses = [];
     $infos = [];
     $active = null;
     do {
         $status = curl_multi_exec($multiRequest, $active);
         $infos[] = curl_multi_info_read($multiRequest);
     } while ($status === CURLM_CALL_MULTI_PERFORM || $active);
     foreach ($singleRequests as $index => $singleRequest) {
         $body = curl_multi_getcontent($singleRequest);
         curl_multi_remove_handle($multiRequest, $singleRequest);
         curl_close($singleRequest);
         $info = $infos[$index];
         $statusCode = $info['http_code'];
         $headers = $info['request_header'];
         if (function_exists('http_parse_headers')) {
             $headers = http_parse_headers($headers);
         } else {
             $header_text = substr($headers, 0, strpos($headers, "\r\n\r\n"));
             $headers = [];
             foreach (explode("\r\n", $header_text) as $i => $line) {
                 if ($i !== 0) {
                     list($key, $value) = explode(': ', $line);
                     $headers[$key] = $value;
                 }
             }
         }
         $responses[] = $this->factory->build($body, $headers, $statusCode);
     }
     curl_multi_close($multiRequest);
     return $responses;
 }
Example #3
0
 public static function get_multi_tags(array $url, $auth)
 {
     $mh = curl_multi_init();
     $header = 'Authorization: Bearer ' . $auth;
     foreach ($url as $key => $links) {
         for ($i = 0; $i < count($links); $i++) {
             $ch[$key][$i] = curl_init();
             curl_setopt($ch[$key][$i], CURLOPT_URL, "https://api.clarifai.com/v1/tag/?url=" . $links[$i]);
             curl_setopt($ch[$key][$i], CURLOPT_HTTPHEADER, array($header));
             curl_setopt($ch[$key][$i], CURLOPT_RETURNTRANSFER, true);
             //add the two handles
             curl_multi_add_handle($mh, $ch[$key][$i]);
         }
     }
     $running = null;
     do {
         curl_multi_exec($mh, $running);
     } while ($running > 0);
     $ret = array();
     foreach ($url as $key => $links) {
         $tags = array();
         for ($i = 0; $i < count($links); $i++) {
             if (strcmp(json_decode(curl_multi_getcontent($ch[$key][$i]))->status_code, "OK") == 0) {
                 array_push($tags, json_decode(curl_multi_getcontent($ch[$key][$i]))->results[0]->result->tag->classes);
             }
             //close the handles
             curl_multi_remove_handle($mh, $ch[$key][$i]);
         }
         $ret[$key] = $tags;
     }
     curl_multi_close($mh);
     return $ret;
 }
 /**
  * Performs multiple (array of RemoteContentRequest) requests and fills in the responses
  * in the $request objects
  *
  * @param Array of RemoteContentRequest's $requests
  * @return $requests
  */
 public function multiFetchRequest(array $requests)
 {
     $mh = curl_multi_init();
     foreach ($requests as $request) {
         $request->handle = $this->initCurlHandle($request->getUrl());
         // Set this so the multihandler will return data
         curl_setopt($request->handle, CURLOPT_RETURNTRANSFER, 1);
         $this->setHeaders($request);
         curl_multi_add_handle($mh, $request->handle);
     }
     $running = null;
     do {
         curl_multi_exec($mh, $running);
     } while ($running > 0);
     foreach ($requests as $request) {
         // Execute the request
         $content = curl_multi_getcontent($request->handle);
         $this->parseResult($request, $content);
         curl_multi_remove_handle($mh, $request->handle);
         unset($request->handle);
     }
     curl_multi_close($mh);
     unset($mh);
     return $requests;
 }
Example #5
0
 /**
  * Php multi curl wrapper
  * @param  array $urls
  * @return array
  */
 public function multiCurl(array $urls)
 {
     // array of curl handles
     $handles = array();
     // data to be returned
     $result = array();
     // multi handle
     $mh = curl_multi_init();
     // loop through $data and create curl handles
     // then add them to the multi-handle
     foreach ($urls as $k => $u) {
         $handles[$k] = curl_init();
         curl_setopt($handles[$k], CURLOPT_URL, $u);
         curl_setopt($handles[$k], CURLOPT_HTTPHEADER, array('Accept-Language:en;q=0.8,en-US;q=0.6'));
         curl_setopt($handles[$k], CURLOPT_RETURNTRANSFER, 1);
         curl_multi_add_handle($mh, $handles[$k]);
     }
     // execute the handles
     $running = null;
     do {
         curl_multi_exec($mh, $running);
     } while ($running > 0);
     // get content and remove handles
     foreach ($handles as $id => $content) {
         $results[$id] = curl_multi_getcontent($content);
         curl_multi_remove_handle($mh, $content);
     }
     // all done
     curl_multi_close($mh);
     return $this->removeScripts($results);
 }
Example #6
0
 public function close()
 {
     foreach ($this->simpleCurlCollection as $simpleCurl) {
         curl_multi_remove_handle($this->multiHandle, $simpleCurl->_getHandle());
     }
     curl_multi_close($multiHandle);
 }
Example #7
0
 public static function sendMultiRequests($urls)
 {
     $result = "";
     $chs = array();
     $mh = curl_multi_init();
     try {
         foreach ($urls as $url) {
             $chs[$url] = curl_init($url);
             curl_setopt_array($chs[$url], self::$curl_options);
             curl_multi_add_handle($mh, $chs[$url]);
         }
         $running = 0;
         do {
             curl_multi_exec($mh, $running);
         } while ($running > 0);
     } catch (Exception $e) {
         print_r($e->getMessage());
     } finally {
         foreach ($chs as $url => $curl) {
             $info = curl_getinfo($curl, CURLINFO_HTTP_CODE);
             if ($info == 200) {
                 $result = $url;
             }
             curl_multi_remove_handle($mh, $curl);
         }
         curl_multi_close($mh);
     }
     return $result;
 }
 /**
  * @param string[] $urls
  * @return string[]
  */
 public function multiGet(array $urls)
 {
     $curlHandlers = [];
     $multiHandler = curl_multi_init();
     foreach ($urls as $url) {
         $currentHandler = curl_init($url);
         $curlHandlers[$url] = $currentHandler;
         curl_setopt($currentHandler, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($currentHandler, CURLOPT_CONNECTTIMEOUT, self::TIMEOUT);
         curl_multi_add_handle($multiHandler, $currentHandler);
     }
     $isStillRunning = null;
     do {
         curl_multi_exec($multiHandler, $isStillRunning);
         sleep(self::LOAD_WAIT_TIME);
     } while ($isStillRunning);
     $results = [];
     // get content and remove handles
     foreach ($urls as $url) {
         $currentHandler = $curlHandlers[$url];
         $results[$url] = curl_multi_getcontent($currentHandler);
         curl_multi_remove_handle($multiHandler, $currentHandler);
     }
     // all done
     curl_multi_close($multiHandler);
     return $results;
 }
Example #9
0
 public function execute()
 {
     $mh = curl_multi_init();
     $chs = $this->chs();
     $stillRunning = 0;
     $result = array();
     if (function_exists('curl_multi_setopt')) {
         curl_multi_setopt($mh, CURLMOPT_PIPELINING, 1);
         curl_multi_setopt($mh, CURLMOPT_MAXCONNECTS, $this->maxConnectsSize());
     }
     foreach ($chs as $ch) {
         curl_multi_add_handle($mh, $ch);
     }
     do {
         $execReturnValue = curl_multi_exec($mh, $stillRunning);
         curl_multi_select($mh);
     } while ($stillRunning > 0);
     foreach ($chs as $i => $ch) {
         $curlError = curl_error($ch);
         if ($curlError === "") {
             $result[$i] = curl_multi_getcontent($ch);
         } else {
             throw new PubnubException("Curl error on handle {$i}: {$curlError}\n");
         }
         curl_multi_remove_handle($mh, $ch);
         curl_close($ch);
     }
     curl_multi_close($mh);
     $this->requests = array();
     if ($execReturnValue != CURLM_OK) {
         throw new PubnubException(curl_multi_strerror($execReturnValue));
     }
     return $result;
 }
Example #10
0
function reqMultiCurls($urls)
{
    // for storing cUrl handlers
    $chs = array();
    // for storing the reponses strings
    $contents = array();
    // loop through an array of URLs to initiate
    // one cUrl handler for each URL (request)
    foreach ($urls as $url) {
        $ch = curl_init($url);
        // tell cUrl option to return the response
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        $chs[] = $ch;
    }
    // initiate a multi handler
    $mh = curl_multi_init();
    // add all the single handler to a multi handler
    foreach ($chs as $key => $ch) {
        curl_multi_add_handle($mh, $ch);
    }
    // execute the multi cUrl handler
    do {
        $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM || $active);
    // retrieve the reponse from each single handler
    foreach ($chs as $key => $ch) {
        if (curl_errno($ch) == CURLE_OK) {
            $contents[] = curl_multi_getcontent($ch);
        } else {
            echo "Err>>> " . curl_error($ch) . "\n";
        }
    }
    curl_multi_close($mh);
    return $contents;
}
Example #11
0
 /**
  * @param $mh
  * @param array $results
  * @param array $options
  * @return int
  */
 public static function makeRequests($mh, array &$results, array $options = array())
 {
     // While we're still active, execute curl
     $active = NULL;
     do {
         // Continue to exec until curl is ready to
         // give us more data
         do {
             $mrc = curl_multi_exec($mh, $active);
         } while ($mrc == CURLM_CALL_MULTI_PERFORM);
         // Wait for activity on any curl-connection
         curl_multi_select($mh);
         //do something with the return values
         while (($info = curl_multi_info_read($mh)) !== FALSE) {
             if ($info["result"] == CURLE_OK) {
                 $info['content'] = curl_multi_getcontent($info["handle"]);
             } else {
                 $info['error'] = curl_error($info["handle"]);
             }
             $results[strval($info["handle"])] = $info;
             curl_multi_remove_handle($mh, $info["handle"]);
         }
     } while ($active && $mrc == CURLM_OK);
     curl_multi_close($mh);
     return $mrc;
 }
Example #12
0
 public function __destruct()
 {
     // Destroy the multi handle.
     if (!empty($this->multi)) {
         curl_multi_close($this->multi);
     }
 }
Example #13
0
 function multi_request($urls)
 {
     $curly = array();
     $result = array();
     $mh = curl_multi_init();
     foreach ($urls as $id => $url) {
         $curly[$id] = curl_init();
         curl_setopt($curly[$id], CURLOPT_URL, $url);
         curl_setopt($curly[$id], CURLOPT_HEADER, 0);
         curl_setopt($curly[$id], CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($curly[$id], CURLOPT_TIMEOUT, 30);
         curl_setopt($curly[$id], CURLOPT_FOLLOWLOCATION, true);
         curl_setopt($curly[$id], CURLOPT_SSL_VERIFYPEER, 0);
         curl_setopt($curly[$id], CURLOPT_SSL_VERIFYHOST, 0);
         curl_multi_add_handle($mh, $curly[$id]);
     }
     $running = null;
     do {
         curl_multi_exec($mh, $running);
     } while ($running > 0);
     foreach ($curly as $id => $c) {
         $result[$id] = curl_multi_getcontent($c);
         curl_multi_remove_handle($mh, $c);
     }
     curl_multi_close($mh);
     return $result;
 }
Example #14
0
 public function __destruct()
 {
     if (isset($this->_mh)) {
         curl_multi_close($this->_mh);
         unset($this->_mh);
     }
 }
Example #15
0
function main()
{
    $port = $_ENV['SERVERPORT'];
    $host = php_uname('n');
    $url = "http://{$host}:{$port}/hello.php";
    $ch1 = curl_init();
    $ch2 = curl_init();
    curl_setopt($ch1, CURLOPT_URL, $url);
    curl_setopt($ch1, CURLOPT_HEADER, 0);
    curl_setopt($ch1, CURLOPT_WRITEFUNCTION, 'except');
    curl_setopt($ch2, CURLOPT_URL, $url);
    curl_setopt($ch2, CURLOPT_HEADER, 0);
    $mh = curl_multi_init();
    curl_multi_add_handle($mh, $ch1);
    curl_multi_add_handle($mh, $ch2);
    $active = null;
    do {
        $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    while ($active && $mrc == CURLM_OK) {
        if (curl_multi_select($mh) != -1) {
            do {
                $mrc = curl_multi_exec($mh, $active);
            } while ($mrc == CURLM_CALL_MULTI_PERFORM);
        }
    }
    curl_multi_close($mh);
}
Example #16
0
 private function _multi_curl($urls)
 {
     $num = count($urls);
     for ($i = 0; $i < $num; $i++) {
         $ch[] = curl_init();
         // 设置URL和相应的选项
         curl_setopt($ch[$i], CURLOPT_URL, $urls[$i]);
         curl_setopt($ch[$i], CURLOPT_HEADER, 0);
     }
     // 创建批处理cURL句柄
     $mh = curl_multi_init();
     // 增加2个句柄
     for ($i = 0; $i < $num; $i++) {
         curl_multi_add_handle($mh, $ch[$i]);
     }
     $running = null;
     // 执行批处理句柄
     do {
         //usleep ( 10000 );
         $fetch[] = curl_multi_exec($mh, $running);
     } while ($running > 0);
     // 关闭全部句柄
     for ($i = 0; $i < $num; $i++) {
         curl_multi_remove_handle($mh, $ch[$i]);
     }
     curl_multi_close($mh);
     return $fetch;
 }
Example #17
0
 /**
  * Executa todos os navegadores fazendo as requisições
  * @return void 
  */
 public function execute()
 {
     if ($this->countRequests() == 0) {
         return false;
     }
     // create the multiple cURL handle
     $mh = curl_multi_init();
     // add the two handles
     foreach ($this->Browsers as $Browser) {
         $Browser->prepare();
         curl_multi_add_handle($mh, $Browser->getCurlResource());
     }
     $active = null;
     // execute the handles
     // execute the handles
     do {
         $n = curl_multi_exec($mh, $active);
         usleep(800);
     } while ($active);
     // close the handles
     foreach ($this->Browsers as $label => $Browser) {
         curl_multi_remove_handle($mh, $Browser->getCurlResource());
         $this->Browsers[$label]->processResult(curl_multi_getcontent($Browser->getCurlResource()));
     }
     curl_multi_close($mh);
 }
Example #18
0
File: Util.php Project: guhya/Slim
 /**
  * Perform parallel cURL request.
  *
  * @param array $urls Array of URLs to make request.
  * @param array $options (Optional) Array of additional cURL options.
  * @return mixed Results from the request (if any).
  */
 public function curlMultiRequest($urls, $options = array())
 {
     $ch = array();
     $results = array();
     $mh = curl_multi_init();
     foreach ($urls as $key => $val) {
         $ch[$key] = curl_init();
         if ($options) {
             curl_setopt_array($ch[$key], $options);
         }
         curl_setopt($ch[$key], CURLOPT_URL, $val);
         curl_setopt($ch[$key], CURLOPT_RETURNTRANSFER, true);
         curl_multi_add_handle($mh, $ch[$key]);
     }
     $running = null;
     do {
         curl_multi_exec($mh, $running);
     } while ($running > 0);
     // Get content and remove handles.
     foreach ($ch as $key => $val) {
         $results[$key] = curl_multi_getcontent($val);
         curl_multi_remove_handle($mh, $val);
     }
     curl_multi_close($mh);
     return $results;
 }
Example #19
0
 /**
  * Ping web services
  * 
  * @param string $sitemap Full website path to sitemap
  * @return array Service key with the HTTP response code as the value.
  */
 public static function ping($sitemap)
 {
     // Main handle
     $master = curl_multi_init();
     // List of URLs to ping
     $URLs = Kohana::config('sitemap.ping');
     $handles = array();
     // Create handles for each URL and add them to the main handle.
     foreach ($URLs as $key => $val) {
         $handles[$key] = curl_init(sprintf($val, $sitemap));
         curl_setopt($handles[$key], CURLOPT_FOLLOWLOCATION, TRUE);
         curl_setopt($handles[$key], CURLOPT_RETURNTRANSFER, TRUE);
         curl_setopt($handles[$key], CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-GB; rv:1.9.2.3) Gecko/20100423 Ubuntu/10.04 (lucid) Firefox/3.6.3');
         curl_multi_add_handle($master, $handles[$key]);
     }
     do {
         curl_multi_exec($master, $still_running);
     } while ($still_running > 0);
     $info = array();
     // Build an array of the execution information.
     foreach (array_keys($URLs) as $key) {
         $info[$key] = curl_getinfo($handles[$key], CURLINFO_HTTP_CODE);
         // Close the handles while we're here.
         curl_multi_remove_handle($master, $handles[$key]);
     }
     // and finally close the master handle.
     curl_multi_close($master);
     return $info;
 }
Example #20
0
 /**
  * Destruct - conditionally closes all open curl handles.
  * @return null
  */
 public function __destruct()
 {
     curl_multi_close($this->mc_handle);
     if ($this->close_curl_handles) {
         $this->destroyCurlQueue();
     }
 }
Example #21
0
 private function consumeStream()
 {
     $url = 'https://stream.gnip.com/accounts/' . GNIP_ACCOUNT . '/publishers/' . $this->endpoint . '/streams/track/Prod.json';
     $that = $this;
     $callback = function ($ch, $data) use($that) {
         $chunk = trim($data);
         if (!empty($chunk)) {
             $that->handleChunk($chunk);
         }
         return strlen($data);
     };
     $ch = curl_init();
     curl_setopt_array($ch, array(CURLOPT_URL => $url, CURLOPT_ENCODING => 'gzip', CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPAUTH => CURLAUTH_BASIC, CURLOPT_USERPWD => GNIP_USERNAME . ':' . GNIP_PASSWORD, CURLOPT_WRITEFUNCTION => $callback, CURLOPT_BUFFERSIZE => 2000, CURLOPT_LOW_SPEED_LIMIT => 1, CURLOPT_LOW_SPEED_TIME => 60));
     $running = null;
     $mh = curl_multi_init();
     curl_multi_add_handle($mh, $ch);
     // the event loop
     do {
         curl_multi_select($mh, 1);
         // wait for activity
         curl_multi_exec($mh, $running);
         // perform activity
     } while ($running > 0);
     curl_multi_remove_handle($mh, $ch);
     curl_multi_close($mh);
 }
Example #22
0
 public static function multi_get_urls(&$urls)
 {
     if (count($urls) <= 0) {
         return false;
     }
     $harr = array();
     //handle array
     foreach ($urls as $k => $v) {
         $h = curl_init();
         curl_setopt($h, CURLOPT_URL, $v['url']);
         curl_setopt($h, CURLOPT_HEADER, 0);
         curl_setopt($h, CURLOPT_RETURNTRANSFER, 1);
         array_push($harr, $h);
     }
     $mh = curl_multi_init();
     foreach ($harr as $k => $v) {
         curl_multi_add_handle($mh, $v);
     }
     $running = null;
     do {
         curl_multi_exec($mh, $running);
     } while ($running > 0);
     // get the result and save it in the result ARRAY
     foreach ($harr as $k => $h) {
         $urls[$k]['data'] = curl_multi_getcontent($h);
     }
     // close all the connections
     foreach ($harr as $k => $v) {
         curl_multi_remove_handle($mh, $v);
     }
     curl_multi_close($mh);
     return true;
 }
Example #23
0
 /**
  * Close a set of cURL handles
  *
  * @return void
  */
 public function close()
 {
     if ($this->_mh) {
         curl_multi_close($this->_mh);
         $this->_mh = null;
     }
 }
function checkForClosedFilePointer($curl_option, $description)
{
    $fp = fopen(dirname(__FILE__) . '/bug48203.tmp', 'w');
    $ch1 = curl_init();
    $ch2 = curl_init();
    $options = array(CURLOPT_RETURNTRANSFER => 1, $curl_option => $fp, CURLOPT_URL => curl_cli_server_start());
    // we also need to set CURLOPT_VERBOSE to test CURLOPT_STDERR properly
    if (CURLOPT_STDERR == $curl_option) {
        $options[CURLOPT_VERBOSE] = 1;
    }
    if (CURLOPT_INFILE == $curl_option) {
        $options[CURLOPT_UPLOAD] = 1;
    }
    curl_setopt_array($ch1, $options);
    curl_setopt_array($ch2, $options);
    fclose($fp);
    // <-- premature close of $fp caused a crash!
    $mh = curl_multi_init();
    curl_multi_add_handle($mh, $ch1);
    curl_multi_add_handle($mh, $ch2);
    $active = 0;
    do {
        curl_multi_exec($mh, $active);
    } while ($active > 0);
    curl_multi_remove_handle($mh, $ch1);
    curl_multi_remove_handle($mh, $ch2);
    curl_multi_close($mh);
    echo "Ok for {$description}\n";
}
Example #25
0
 public function flush()
 {
     if (false === ($curlm = curl_multi_init())) {
         throw new ClientException('Unable to create a new cURL multi handle');
     }
     // prepare a cURL handle for each entry in the queue
     foreach ($this->queue as $i => &$queue) {
         list($request, $response, $options) = $queue;
         $curl = $queue[] = static::createCurlHandle();
         $this->prepare($curl, $request, $options);
         curl_multi_add_handle($curlm, $curl);
     }
     $active = null;
     do {
         $mrc = curl_multi_exec($curlm, $active);
     } while (CURLM_CALL_MULTI_PERFORM == $mrc);
     while ($active && CURLM_OK == $mrc) {
         if (-1 != curl_multi_select($curlm)) {
             do {
                 $mrc = curl_multi_exec($curlm, $active);
             } while (CURLM_CALL_MULTI_PERFORM == $mrc);
         }
     }
     // populate the responses
     while (list($request, $response, $options, $curl) = array_shift($this->queue)) {
         static::populateResponse($curl, curl_multi_getcontent($curl), $response);
         curl_multi_remove_handle($curlm, $curl);
     }
     curl_multi_close($curlm);
 }
Example #26
0
 public function close()
 {
     curl_multi_close($this->curlHandle);
     $this->curlHandle = NULL;
     $this->requestMap = array();
     $this->headers = array();
 }
Example #27
0
function chk($proxies)
{
	$mc = curl_multi_init ();
	for ($thread_no = 0; $thread_no<count ($proxies); $thread_no++)
	{
		$c [$thread_no] = curl_init ();
		curl_setopt ($c [$thread_no], CURLOPT_URL, "http://google.com");
		curl_setopt ($c [$thread_no], CURLOPT_HEADER, 0);
		curl_setopt ($c [$thread_no], CURLOPT_RETURNTRANSFER, 1);
		curl_setopt ($c [$thread_no], CURLOPT_CONNECTTIMEOUT, 5);
		curl_setopt ($c [$thread_no], CURLOPT_TIMEOUT, 10);
		curl_setopt ($c [$thread_no], CURLOPT_PROXY, trim ($proxies [$thread_no]));
		curl_setopt ($c [$thread_no], CURLOPT_PROXYTYPE, 0);
		curl_multi_add_handle ($mc, $c [$thread_no]);
	}
	do 
	{
		while (($execrun = curl_multi_exec ($mc, $running)) == CURLM_CALL_MULTI_PERFORM)
		if ($execrun != CURLM_OK) break;
		while ($done = curl_multi_info_read ($mc))
		{
			$info = curl_getinfo ($done ['handle']);
			if ($info ['http_code'] == 301) 
				echo trim ($proxies [array_search ($done['handle'], $c)])."<br>\r\n";
			curl_multi_remove_handle ($mc, $done ['handle']);
		}
	} while ($running);
	curl_multi_close ($mc);
}
 /**
  *
  */
 public function __destruct()
 {
     if (!is_null($this->multiHandle)) {
         curl_multi_close($this->multiHandle);
         $this->multiHandle = null;
     }
 }
Example #29
0
 public function execute()
 {
     $mh = curl_multi_init();
     $conn = [];
     foreach ($this->getUrls() as $k => $url) {
         $this->setOption(CURLOPT_URL, $url);
         $ch = curl_init();
         curl_setopt_array($ch, $this->getOptions());
         $conn[$k] = $ch;
         curl_multi_add_handle($mh, $conn[$k]);
     }
     $active = false;
     do {
         $mrc = curl_multi_exec($mh, $active);
     } while ($mrc == CURLM_CALL_MULTI_PERFORM);
     while ($active && $mrc == CURLM_OK) {
         if (curl_multi_select($mh) != -1) {
             do {
                 $mrc = curl_multi_exec($mh, $active);
             } while ($mrc == CURLM_CALL_MULTI_PERFORM);
         }
     }
     $res = [];
     foreach ($this->getUrls() as $k => $url) {
         $res[$k] = curl_multi_getcontent($conn[$k]);
         curl_close($conn[$k]);
         curl_multi_remove_handle($mh, $conn[$k]);
     }
     curl_multi_close($mh);
     return $res;
 }
Example #30
-5
 public function exec()
 {
     $mh = curl_multi_init();
     foreach ($this->url_list as $i => $url) {
         $conn[$i] = curl_init($url);
         curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($conn[$i], CURLOPT_HEADER, 0);
         curl_setopt($conn[$i], CURLOPT_NOBODY, 0);
         curl_setopt($conn[$i], CURLOPT_FOLLOWLOCATION, 0);
         curl_setopt($conn[$i], CURLOPT_TIMEOUT, 30);
         curl_multi_add_handle($mh, $conn[$i]);
     }
     $active = FALSE;
     do {
         $mrc = curl_multi_exec($mh, $active);
     } while ($mrc == CURLM_CALL_MULTI_PERFORM);
     while ($active && $mrc == CURLM_OK) {
         //if(curl_multi_select($mh) != -1){
         do {
             $mrc = curl_multi_exec($mh, $active);
         } while ($mrc == CURLM_CALL_MULTI_PERFORM);
         //}
     }
     $result = array();
     foreach ($this->url_list as $i => $url) {
         $result[$i] = curl_multi_getcontent($conn[$i]);
         curl_close($conn[$i]);
         curl_multi_remove_handle($mh, $conn[$i]);
     }
     curl_multi_close($mh);
     return $result;
 }