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
Deixe um comentário