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

<?php
function curl_progress($resource,$download_size, $downloaded, $upload_size, $uploaded) {     if($download_size > 0)
         print ("Progresso download: ".($downloaded / $download_size  * 100));
    if($upload_size> 0)
         print ("Progresso Upload: ".($uploaded/ $upload_size * 100));
}

Agora a nossa implementação do cURL

 

<?php
 $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:' ) );
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, "Arktre::odiopuro");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'curl_progress');
    curl_setopt($ch, CURLOPT_NOPROGRESS, false); // necessário para fazer o progresso funcionar
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $response = curl_exec($ch);

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 *

This site uses Akismet to reduce spam. Learn how your comment data is processed.