<?php
if ( isset( $_GET['source'] ) ) {
    
highlight_file"speedtest.php" );
    exit;
}

$defNumKB 512;
$maxNumKB 16384;
if ( isset( 
$_GET['numKB'] ) ) {
    if ( 
intval$_GET['numKB'] ) < $defNumKB || intval$_GET['numKB'] ) > $maxNumKB ) {
        
header"Location: speedtest.php?numKB={$defNumKB});
        exit;
    } else {
        
$numKB intval$_GET['numKB'] );
    }
} else {
    
$numKB $defNumKB;
}
?><!DOCTYPE HTML>
<html lang="en" class="no-js">
<head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<title>PHP Speed Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="index,follow" />
<style type="text/css">
html {
    font-family: sans-serif;
    color: #000;
    background: #fff;
}

* {
    font-size: medium;
}

#wait {
    border-bottom: thin dotted black;
}

#wait abbr {
    border: none;
}

#done {
    font-weight: bold;
}

#benchmark {
    padding: 1em;
    border: 1px solid black;
    background: #ffe;
    color: #000;
}
</style>
<?php include( "../include/head.inc" ); ?>
</head>
<?php flush( ); ?>
<body>


<?php include( "../include/menu.inc" ); ?>

<h1>PHP Speed Test</h1>

<p>This page, based on code by <a href="http://jan.moesen.nu/">Jan Moesen</a>, measures your link speed.</p>

<p>Since the original code gave me results in the 75&nbsp;<abbr title="MegaBytes per second">MB/s</abbr> range, whereas my provider's monthly bill stated 6&nbsp;<abbr title="MegaBytes per second">MB/s</abbr>, I added more "randomness" in the test data, thus eliminating (or at least diminishing) the effect of data compression.<br />
The modified test gave me more realistic results in the 4&nbsp;<abbr title="MegaBytes per second">MB/s</abbr> range...</p>

<p>By default, your link speed is tested by measuring the time it takes to download 512&nbsp;<abbr title="KiloBytes">KB</abbr>.<br />
You can use a larger number of bytes for more accuracy by specifying the size of the download:</p>

<p><a href="speedtest.php?numKB=16384" class="Code">http://www.robvanderwoude.com/speedtest.php?numKB=16384</a></p>

<p>where <code>numKB</code> may be any number from 512..16384.</p>

<div id="benchmark">

<p><strong>This is not a script to benchmark or determine the execution speed of PHP scripts.</strong>
If you're looking for one, check out the PEAR <a href="http://pear.php.net/package/Benchmark">Benchmark package</a>.</p>

<p>This script sends <?php echo $numKB?> <abbr title="KiloBytes">KB</abbr> of HTML comments to your client.
Both generating <em>and</em> parsing that HTML may add to the total transfer time, so don't take this as your raw download speed.</p>

</div>

<p><a href="speedtest.php?source=1">(Show this page's source code)</a></p>

<p id="PleaseWaitText"><strong>Please wait...</strong></p>

<p id="wait">Transferring <?php echo $numKB?> <abbr title="kilobyte">KB</abbr></p>

<!--
<?php
flush
( );
$nlLength  strlen"\n" );
$timeStart microtimetrue );
for ( 
$i 0$i $numKB$i++ ) {
    
// Make the data as random as possible to prevent data compression from influencing the test results 
    
$startStr substrmd5uniqid''true ) ), -);
    for ( 
$j 0$j 128$j++ ) {
        
$startStr .= substrmd5$startStr ), -);
    }
    echo 
substr$startStr01024 $nlLength ) . "\n";
    
flush( );
}
$timeEnd  microtimetrue );
$timeDiff round$timeEnd $timeStart);
?>
-->

<p id="done"><?php echo "Transferred {$numKB} <abbr title=\"KiloBytes\">KB</abbr> in {$timeDiff} seconds: " round( ( $numKB 1024 ) / $timeDiff) . ' <abbr title="MegaBytes per second">MB/s</abbr> (or ' round( ( $numKB 128 ) /$timeDiff) . ' <abbr title="Megabits per second">Mb/s</abbr>'?> )</p>

<?php
include( "../include/menufoot.inc" );
include( 
"../include/foot.inc" );
?>

<script type="text/javascript">
document.getElementById('PleaseWaitText').style.display='none';
</script>

</body>
</html>