Acompanhamento de Progresso no cURL com PHP

Utilizo com certa frequencia o cURL em meus projetos e adoro ele por conta de todas as possibilidades que ele nos dá, principalmente com o envio de cabeçalhos. Mas uma novidade para mim foi descobrir que era possível o acompanhamento de progresso no cURL com PHP.

Achei isso simplesmente fantástico! Estava com um problema em que uma aplicação não conseguia fazer o download de arquivos muito grandes, mas como saber onde era o problema? Procurando na internet toda encontrei callback do cURL para PHP que nos avisa a toda vez que um pedaço do arquivo é baixado ou subido.

Vamos ao código, primeiro o callback

  1. <?php
  2.  
  3. function curl_progress($resource,$download_size, $downloaded, $upload_size, $uploaded) { if($download_size > 0)
  4. print ("Progresso download: ".($downloaded / $download_size * 100));
  5. if($upload_size> 0)
  6. print ("Progresso Upload: ".($uploaded/ $upload_size * 100));
  7. }
  8.  
  9.  

Agora a nossa implementação do cURL

 

  1. <?php
  2.  
  3. $ch = curl_init();
  4. curl_setopt($ch, CURLOPT_HEADER, 0);
  5. curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
  6. curl_setopt($ch, CURLOPT_URL, $url);
  7. curl_setopt($ch, CURLOPT_USERAGENT, "Arktre::odiopuro");
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  9. curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'curl_progress');
  10. curl_setopt($ch, CURLOPT_NOPROGRESS, false); // necessário para fazer o progresso funcionar
  11. curl_setopt($ch, CURLOPT_POST, true);
  12. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  13. $response = curl_exec($ch);
  14.  
  15.  

O resultado é essa saída bonita!

Progresso: 0.6532900454675
Progresso: 2.5532900454675
Progresso: 2.5532900454675
Progresso: 2.5532900454675
[...]
Progresso: 76.914346406643
Progresso: 77.548795145797
Progresso: 100

Rápido de resolver!

http://php.net/manual/en/function.curl-setopt.php
https://gist.github.com/bdunogier/1030450
http://stackoverflow.com/questions/13958303/curl-download-progress-in-php

Uma ideia sobre “Acompanhamento de Progresso no cURL com PHP

  1. Pingback: PHP Curl Timeout e ConnectTimeout - Pereira, Thiago Santos.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *