Calculer la vitesse de téléchargement avec cURL

Comment calculer la vitesse de transfert d'une connexion ?
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
 */
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;
    }

}
?>

Exemple d'utilisation de la class DownloadSpeed
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
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour16/09/2011
VisualisationVu 47 fois
PublicInternaute
CategorieWeb - PHP - Reseaux
Auteur de l'article
fobec fobec
connecté le 14/02/2012
36 ans - France Nord-Est
101 articles dans la section
Contacter l'auteur
Partager l'article