<?php
if ($datasize floor($datasize)) {
    
// spit out some headers to try and stop the browser caching anything
    
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');        // Date in the past
    
header('Last-Modified: ' gmdate('D, d M Y H:i:s') . ' GMT');    // always modified
    
header('Cache-Control: no-store, no-cache, must-revalidate');    // HTTP/1.1
    
header('Cache-Control: post-check=0, pre-check=0'false);
    
header('Pragma: no-cache');                    // HTTP/1.0
    
}

$sizeopts = array(
    
5    => '5 kilobytes',
    
25    => '25 kilobytes',
    
100    => '100 kilobytes',
    
300    => '300 kilobytes',
    
512    => 'half a megabyte',
    
1024    => '1 megabyte',
    
2048    => '2 megabytes',
    );
?>
<html>

<head>

<title>
Bandwidth Calculator: Find out how fast your connection is
</title>

<?=$style_head?>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Script-Type" content="text/javascript">

<meta name="description" content="Bandwidth guesser<?=($datasize " - testing with $datasize KB" '')?>">
<meta name="keywords" content="bandwidth, measure, speed, kbps, kbytes / sec, kilobytes per second, kilobits per second, tool">
<? include 'metatags.inc'?>

<? if ($datasize) { ?>

<script type="text/javascript">
<!--
function linespeed(num_seconds, num_kbytes) {
    bytes    = num_kbytes * 1024;
    return Math.round(num_kbytes / num_seconds);
    }

var tmptime    = new Date();
time_start    = tmptime.getTime();
// -->
</script>
<!--<?php

function randchar($exclusions=array()) {
    
// return a random character that isn't $exclude
    
$char chr(mt_rand(32126));
    return 
in_array($char$exclusions) ? randchar($exclusions) : $char;
    }

    for (
$b 0$b < (($datasize 1024) - 40); $b++) {    // ~40 bytes 
        
echo randchar(array('-''>''/''*'));
        }
?>-->
<script type="text/javascript">
<!--
var tmptime    = new Date();
var time_end    = tmptime.getTime();

var msecs    = time_end - time_start;
var numsecs    = msecs / 1000;

var KBps    = linespeed(numsecs, <?=$datasize?>);
var Kbps    = Math.round(KBps * 8);

report    = 'You downloaded <?=$datasize?> kilobytes of data in ' + numsecs + ' seconds';

// -->
</script>

<?    ?>

<body bgcolor="#CCDDEE">

<center>

<table cellpadding=5 cellspacing=3 width="600">

<tr><td align=center style="border: 1px solid #000066; padding: 3px; background-color: #336699; color: white;">
    [ <a style="color: white;" href="../">other bits of internet rubbish</a>
    | <a style="color: white;" href="bandwidth-calculator.phps">PHP source</a>
    ]
</td></tr>

<tr><td style="border: 1px solid #000066; background-color: #E5F5F5;">
OK, so it's not the most accurate measurement in the world, but hey, it kept me amused for a while. Select how much data you want to test with and hit submit to see what sort of speeds you're getting.

<br><br>
<b>Note:</b> The bigger chunk of data used, the more accurate it'll be. To demonstrate how this can make a difference, I've added the option to test your bandwidth with just 5 KB of data; try it to see how off the results are.
</td></tr>

<tr><td align=center style="border: 1px solid #000066; background-color: #F7FFFF;">
    <table cellpadding=2 cellspacing=1>

    <form action="<?=$PHP_SELF?>">

    <tr>
    <td>Choose how much data to test your bandwidth with:</td>
    <td><?=html_select('datasize'$sizeopts$datasize)?></td>
    <td><input type=submit value="test my bandwidth"></td>
    </tr>

    </form>

    </table>
</td></tr>

<? if ($datasize) { ?>

<tr><td align=center style="border: 1px solid #000066; background-color: #F7FFFF;">
<b><script type="text/javascript"><!--
document.write(report);
// --></script></b>

<br><br>
That's <script type="text/javascript"><!--
document.write(KBps);
// --></script> Kbytes (about <script type="text/javascript"><!--
document.write(Kbps);
// --></script> Kbits) / second.
</td></tr>

<?    ?>

</table>

</body>

</html>