Publié le 16/09/2011
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Calculer la vitesse de telechargement avec cURL

Comment calculer la vitesse de transfert d'une connexion ?
En effet, la vitesse se mesure à partir du nombre de ko transféré pendant une durée donnée, et justement l'extension cUrl intègre ces mesures en natif.

Charger un fichier avec cUrl

Par exemple en téléchargeant un fichier sur Internet, il est intéressant de connaitre la vitesse de chargement. La class DownloadSpeed regroupe 2 méthodes:
loadsimple(): charger un fichier avec file_get_contents() et mesurer le temps avec microtime(),
loadcurl(): charger un fichier avec l'extension cURL.
<?php
/**
* Calculer la vitesse de téléchargement
* @author Fobec.com 2011
* @copyright http://www.fobec.com/php5/1109/calculer-vitesse-telechargement-avec-curl.html
*/
class DownloadSpeed {
 
    private $time = 0.0;
    private $bitrate = 0.0;
    private $log = "";
 
/**
* Méthode1 avec file_get_contents
* @param string $url
*/
    public function loadsimple($url) {
        $t0 = microtime(true);
        $file = @file_get_contents($url);
        $t1 = microtime(true);
 
        if ($file !== FALSE) {
            $tdif = $t1 - $t0;
            $size = strlen($file) / 1024;
            $this->time = number_format($tdif, 3, ',', ' ');
            $this->bitrate = number_format($size / $tdif, 2, ',', ' ');
        } else {
            echo 'error';
        }
    }
/**
* Méthode2 avec cURL
* @param string $url
*/
    public function loadcurl($url) {
        $this->log = "";
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2);
        curl_setopt($curl, CURLOPT_TIMEOUT, 60);
 
        $execute = curl_exec($curl);
        $info = curl_getinfo($curl);
 
        if ($info['http_code'] == 200) {
            $this->time = number_format($info['total_time'], 3, ',', ' ');
            $this->bitrate = number_format($info['speed_download'] / 1024, 2, ',', ' ');
 
            foreach ($info as $key => $val) {
                $this->log.=str_pad($key, 30) . $val . "n";
            }
        } else {
            echo 'error';
        }
    }
/**
* Duree du telechargement
* @return string
*/
    public function getTime() {
        return $this->time;
    }
/**
* Vitesse de connexion
* @return string
*/
    public function getBitrate() {
        return $this->bitrate;
    }
/**
* Toutes les info avec cURL
* @return string
*/
    public function getLog() {
        return $this->log;
    }
}
?>

Comparer file_get_contents() et cUrl

Voici un exemple pour comparer les 2 méthodes celle du pauvre avec file_get_contents() et microtime() et celle de l'extension cURL.
<?php
/**
* Exemple
*/
$downloadSpeed = new DownloadSpeed();
$downloadSpeed->loadsimple("http://www.aupif.com/logiciel_super.zip");
echo 'loadsimple: methode avec file_get_contents';
echo '<br/>duree du chargement: ' . $downloadSpeed->getTime() . ' sec';
echo '<br/>vitesse de chargement: ' . $downloadSpeed->getBitrate() . ' ko/s';
$downloadSpeed->loadcurl("http://www.aupif.com/logiciel_super.zip");
echo "<br/><br/>loadcurl: methode avec l'extension curl";
echo '<br/>duree du chargement: ' . $downloadSpeed->getTime() . ' sec';
echo '<br/>vitesse dechargement: ' . $downloadSpeed->getBitrate() . ' ko/s';
echo '<br/>journal: <pre>' . $downloadSpeed->getLog() . '</pre>';
?>

Résultats de l'exemple

Les 2 méthodes donnent des résultats similaires. Il est clair que cURL fournit des détails très intéressants tels que la résolution DNS (namelookup_time), le temps de réponse du serveur (pretransfer_time) et la vitesse de chargement (speed_download).

loadsimple: methode avec file_get_contents

duree du chargement: 0,065 sec
vitesse dechargement: 9 986,42 ko/s

loadcurl: methode avec l'extension curl
duree du chargement: 0,064 sec
vitesse dechargement: 10 151,27 ko/s
journal:

url http://www.aupif.com/logiciel_super.zip
content_type application/zip
http_code 200
header_size 276
request_size 178
filetime -1
ssl_verify_result 0
redirect_count 0
total_time 0.063679
namelookup_time 0.004506
connect_time 0.005501
pretransfer_time 0.005557
size_upload 0
size_download 661937
speed_download 10394902
speed_upload 0
download_content_length 661937
upload_content_length 0
starttransfer_time 0.006849
redirect_time 0


Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
16/09/2011
Visualisation
vu 4597 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Fobec dans php5

Merci Souti d'avoir signale la balise manquante,
le code est corrige dans l'exemple.

Publié par mido dans java

si je veut extraire les liens a partir de google searche c'est a dire utiliser la raquette suivante "http://www.google.tn/search?q=" avec java bien sur ..merci d'avance :)

Publié par Loualfcha dans CMS

Je n'arrive pas &Atilde;&nbsp; installer le logiciel<br>Message d'erreur: DeleteFile a &Atilde;&copy;chou&Atilde;&copy;; code 5<br>Acc&Atilde;&um...

Publié par Christophe dans CMS

en remplacant la ligne:
SHGetFileInfo(PChar(ePath.Text + SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON);
par la ligne
SHGetFileInfo(PChar(ePath.Text + Sear...

Publié par deefaze dans CMS

Label1.Caption := format(\'Red: $%.2x, Green : $%.2x, Blue : $%.2x\',[R,G,B]);

:)