Dome: Übertragungsgeschwindigkeit ermitteln

Guten Abend,

ich möchte gerne mit PHP die Übertragungsgeschwindigkeit ermitteln.
Ich versuche das momentan so:

$size = 1000000;

  
print("<!--");  
ob_start();  
for ($i = 0; $i < $size; $i++) {  
    echo "1";  
}  
  
$time_a_1 = microtime();  
ob_end_flush();  
$time_a_2 = microtime();  
print("-->");  
  
$diff_a = $time_a_2-$time_a_1;  
$kbit_a = (($size / 8)/1024)/$diff_a;  

Das funktioniert so nur leider nicht. Meine Werte sind viel zu groß und wenn ich $size veränder verändert sich auch meine Geschwindigkeit. Habe ich einen Denkfehler gemacht?

  1. Hallo Dome,

    ich möchte gerne mit PHP die Übertragungsgeschwindigkeit ermitteln.

    Meines wissens nach ist es mit PHP allein nicht möglich, die Übertragungsgeschwindigkeit zu ermitteln. Wenn ich mich richtig dran erinnere funktioniert es aber beispielsweise mit einer Kombination aus PHP und JavaScript.

    Ich versuche das momentan so:

    $size = 1000000;

    print("<!--");
    ob_start();
    for ($i = 0; $i < $size; $i++) {
        echo "1";
    }

    $time_a_1 = microtime();
    ob_end_flush();
    $time_a_2 = microtime();
    print("-->");

    $diff_a = $time_a_2-$time_a_1;
    $kbit_a = (($size / 8)/1024)/$diff_a;

    
    >   
    > Das funktioniert so nur leider nicht. Meine Werte sind viel zu groß und wenn ich $size veränder verändert sich auch meine Geschwindigkeit. Habe ich einen Denkfehler gemacht?  
      
    Hierbei ermittels Du lediglich, wie lange PHP braucht um die Funktion ob\_end\_flush() auszuführen. Bei Deiner Berechnung von $kbit\_a musst Du noch einen Dreisatz anwenden, um auf $size pro \_1\_ Sekunde zu kommen.  
      
    Gruß, Dennis
    
  2. Hi!

    ich möchte gerne mit PHP die Übertragungsgeschwindigkeit ermitteln.
    $time_a_1 = microtime();
    ob_end_flush();
    $time_a_2 = microtime();

    Ein ob_end_flush() sorgt nur dafür, dass der Ausgabepuffer PHPs in Richtung Webserver entleert wird. Ob dieser das Zeug dann sendet ist nicht auf jedem System sichergestellt. Nun fangen die Daten an, durchs Netz zu trödeln. Aber ob der Webserver und/oder PHP auf die Übertragungsbestätigung warten ... weiß ich nicht, glaub ich nicht.

    $diff_a = $time_a_2-$time_a_1;
    Das funktioniert so nur leider nicht.

    Kann ja so auch nicht. Schau dir in der PHP-Dokumentation an, wie microtime() funktioniert, besonders die Variante mit dem optionalen Parameter.

    Lo!

  3. Hallo,

    ihr habt leider Recht, mit PHP ist es nicht möglich. Ich habs jetzt mit Javascript gelöst. Habe eine Textdatei die mit 1 gefüllt ist uns 100 kb entspricht. Diese lade ich nehme mit Javascript die Zeit.

    <script type="text/javascript">
    <!--
        time      = new Date();
        starttime = time.getTime();
    // -->
    </script>
    <!--
    <? include("speed_data.txt"); ?>
    // -->
    <script type="text/javascript">
    <!--
        time          = new Date();
        endtime       = time.getTime();
        downloadtime     = (endtime - starttime)/1000;
        kbytes_of_data = 100;
        linespeed     = kbytes_of_data/downloadtime;
        document.write(linespeed);
    // -->
    </script>

    Liebe Grüße Dome

    1. Hey Dome,

      ihr habt leider Recht, ...

      wieso leider? Aber schön, dass Du eine Lösung gefunden hast und, noch schöner, dass Du sie auch hier noch einmal postest.

      Gruß, Dennis