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


Comentários

Uma resposta para “Acompanhamento de Progresso no cURL com PHP”

  1. […] ter certeza agora que o problema era mesmo do cURL? Simples! Analisando o progresso do download, explico como fazer isso nesse post. Logo como saída eu tinha porcentagens de progresso variadas entre 40% e 80%, mas nunca […]

Deixe um comentário

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.