Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Classes criadas por mim para utilizar em meus snippets
- *
- * @author: Pedro Prata L. Papadópolis
- * @contact-twitter: @papadopolis
- * @contact-messenger: [email protected]
- *
- *
- * Algumas partes das classes são comentadas e a classe ainda está em fase BETA, não consegui deixar muito dinâmico o esquema pra setar as options do curl...
- */
- //Executar requisições HTTP simultâneas
- class MultiCurl {
- public $urls = array(); //Array que armazena as urls adicionadas
- private $ch = array(); //Handle curl (curl_init) das urls
- private $setopt = null; //Índices curlopt adicionados via (curl_setopt_array)
- private $execTime = 0;
- public $same = false; //False: usa array_unique para retirar urls repetidas, True: executa urls mesmo repetidas
- public $erros = array(); //Array de erros encontrados internamente
- public $data = array(); //O conteúdo retornado pela classe fica armazenado nesta Array.
- function __construct() {
- $this->setCurlopt();
- }
- public function add() {
- $urls = func_get_args();
- $count = count($urls);
- $t=0;
- do {
- if($this->same)
- if(!in_array($urls[$t],$this->urls))
- $this->urls[] = $urls[$t];
- else
- $this->urls[] = $urls[$t];
- ++$t;
- } while($t!==$count);
- }
- public function setCurlopt(array $c = null, $f = null) {
- if($c==null && $this->setopt == null) //Array de valores e índices de curlopt padrão.
- $this->setopt = array(
- CURLOPT_RETURNTRANSFER => 1,
- CURLOPT_COOKIE => null,
- CURLOPT_HEADER => 0,
- CURLOPT_NOBODY => null,
- CURLOPT_FOLLOWLOCATION => 1,
- );
- else if($f!==null)
- $this->setopt = array_merge($c,$this->setopt);
- else
- $this->setopt = $c;
- }
- public function addHandle() {
- $count = count($this->ch);
- $t=0;
- while($t<$count) {
- $this->setopt[CURLOPT_URL] = $this->urls[$t]; //URL à ser acessada é setada aqui
- curl_setopt_array($this->ch[$t],$this->setopt);
- ++$t;
- }
- }
- function single($url,$setopt = null) {
- $ch = curl_init();
- if($setopt == null)
- $this->setopt[CURLOPT_URL] = $url;
- else
- $this->setCurlopt($setopt);
- @curl_setopt_array($ch,$this->setopt);
- $output = @curl_exec($ch);
- @curl_close($ch);
- return $output;
- }
- public function exec() {
- $count = count($this->urls);
- $t=0;
- while($t<$count) {
- $this->ch[] = @curl_init();
- ++$t;
- }
- $this->addHandle();
- $mh = @curl_multi_init();
- $t=0;
- while($t<$count) {
- @curl_multi_add_handle($mh,$this->ch[$t]);
- ++$t;
- }
- $nulo = null;
- do {
- $res = curl_multi_exec($mh,$nulo);
- sleep($this->execTime);
- } while ($nulo > 0);
- $t=0;
- do {
- $this->data[] = @curl_multi_getcontent($this->ch[$t]);
- @curl_multi_remove_handle($mh,$this->ch[$t]);
- ++$t;
- } while ($this->ch[$t]!==null);
- return $this->data;
- }
- public function setExecTime($t) {
- $this->execTime = $t;
- }
- //Não fiz um esquema pra mostrar erros dentro da classe, mas se quiser adicionar erros use esta função para guardá-los na Array $erros
- private function addError($str) {
- $this->erros[] = $str;
- }
- public function debbug($var) {
- $var = $this->{$var};
- $tipo = gettype($var);
- if(is_array($var))
- print_r(array_values($var));
- else
- echo $var;
- echo var_dump($var);
- }
- public function reset() {
- $this->urls = array();
- $this->ch = array();
- $this->erros = array();
- $this->data = array();
- }
- public function getVar($var) {
- $var = $this->{$var};
- return $var;
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment