| 1 | <?php
|
|---|
| 2 | ###############################################################################
|
|---|
| 3 | ## Fancy Speed Test - Easily measure your upload and download speeds
|
|---|
| 4 | ## Home Page: http://www.brandonchecketts.com/speedtest/
|
|---|
| 5 | ## Author: Brandon Checketts
|
|---|
| 6 | ## File: download.php
|
|---|
| 7 | ## Version: 1.0
|
|---|
| 8 | ## Date: 2006-02-06
|
|---|
| 9 | ## Purpose: Download the data, display graphs that move as the download
|
|---|
| 10 | ## progresses. Use JavaScript to get the dynamic content.
|
|---|
| 11 | ###############################################################################
|
|---|
| 12 |
|
|---|
| 13 | require("common.php");
|
|---|
| 14 | ReadConfig(dirname(__FILE__)."/speedtest.cfg");
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 | ## Make sure this user is allowed to use the test
|
|---|
| 18 | $remote_addr = $_SERVER['REMOTE_ADDR'];
|
|---|
| 19 | $disallow = $config->{'general'}->{'disallow'};
|
|---|
| 20 | $allow = $config->{'general'}->{'allow'};
|
|---|
| 21 | if ( $allow && (! preg_match("/$allow/",$remote_addr)) ) {
|
|---|
| 22 | include("unallowed.html");
|
|---|
| 23 | exit;
|
|---|
| 24 | } elseif ( $disallow && preg_match("/$disallow/", $remote_addr) ) {
|
|---|
| 25 | include("unallowed.html");
|
|---|
| 26 | exit;
|
|---|
| 27 | }
|
|---|
| 28 |
|
|---|
| 29 |
|
|---|
| 30 |
|
|---|
| 31 | ## Figure out how many bytes to download/upload depending on if we are using
|
|---|
| 32 | ## auto_size or not. If using auto_size, then determine sizes based
|
|---|
| 33 | ## on initial results
|
|---|
| 34 | $config_auto_size = $config->{'general'}->{'auto_size'};
|
|---|
| 35 | if ($config_auto_size) {
|
|---|
| 36 | ## We're using the auto_size functionality
|
|---|
| 37 | if ( isset($_GET['auto_size']) && $_GET['auto_size']) {
|
|---|
| 38 | ## Intial test is done. Set down/upload sizes to the same as
|
|---|
| 39 | ## our initial measured speeds. That way the test should take
|
|---|
| 40 | ## about 8 seconds for each test (up/down) making it about a
|
|---|
| 41 | ## 16 second test
|
|---|
| 42 | $down_kbytes = $_GET['downspeed'];
|
|---|
| 43 | $up_kbytes = $_GET['upspeed'];
|
|---|
| 44 | } else {
|
|---|
| 45 | ## Initial test using auto_size
|
|---|
| 46 | $down_kbytes = $config->{'download'}->{'initial_kbytes'};
|
|---|
| 47 | $up_kbytes = $config->{'upload'}->{'initial_kbytes'};
|
|---|
| 48 | }
|
|---|
| 49 | } else {
|
|---|
| 50 | ## auto_size is off. Just to the default sizes
|
|---|
| 51 | $down_kbytes = $config->{'download'}->{'default_kbytes'};
|
|---|
| 52 | $up_kbytes = $config->{'upload'}->{'default_kbytes'};
|
|---|
| 53 | }
|
|---|
| 54 |
|
|---|
| 55 |
|
|---|
| 56 | ## Make sure sizes are below our configured limits
|
|---|
| 57 | if ($down_kbytes > $config->{'download'}->{'max_kbytes'}) {
|
|---|
| 58 | $down_kbytes = $config->{'download'}->{'max_kbytes'};
|
|---|
| 59 | }
|
|---|
| 60 | if ($up_kbytes > $config->{'upload'}->{'max_kbytes'}) {
|
|---|
| 61 | $up_kbytes = $config->{'upload'}->{'max_kbytes'};
|
|---|
| 62 | }
|
|---|
| 63 |
|
|---|
| 64 | if ($config->{'upload'}->{'skip_upload'}) {
|
|---|
| 65 | $up_kbytes = 0;
|
|---|
| 66 | }
|
|---|
| 67 |
|
|---|
| 68 | ## Calculate number of loops for up/down, etc
|
|---|
| 69 | $each_chunk = 50;
|
|---|
| 70 | $progress_bar_width="400";
|
|---|
| 71 | $reloads = $down_kbytes / $each_chunk;
|
|---|
| 72 | $increment = $progress_bar_width / $reloads;
|
|---|
| 73 | $download_progress_bar_increment = $increment;
|
|---|
| 74 |
|
|---|
| 75 | $reloads = $up_kbytes / $each_chunk;
|
|---|
| 76 | $increment = $progress_bar_width / $reloads;
|
|---|
| 77 | $upload_progress_bar_increment = $increment / 5;
|
|---|
| 78 |
|
|---|
| 79 |
|
|---|
| 80 | $pretty_version = $config->{'general'}->{'pretty_version'};
|
|---|
| 81 | ?>
|
|---|
| 82 |
|
|---|
| 83 | <html>
|
|---|
| 84 | <head>
|
|---|
| 85 | <title><?php print $config->{'general'}->{'page_title'}; ?> - Fancy Speed Test</title>
|
|---|
| 86 | <meta http-equiv="Expires" CONTENT="Fri, Jan 1 1980 00:00:00 GMT" />
|
|---|
| 87 | <meta http-equiv="Pragma" CONTENT="no-cache" />
|
|---|
| 88 | <meta http-equiv="Cache-Control" CONTENT="no-cache" />
|
|---|
| 89 | <link rel="stylesheet" href="style.css" />
|
|---|
| 90 | </head>
|
|---|
| 91 | <body>
|
|---|
| 92 |
|
|---|
| 93 | <?php
|
|---|
| 94 | if (file_exists("header.html")) {
|
|---|
| 95 | ## Include "header.html" for a custom header, if the file exists
|
|---|
| 96 | include("header.html");
|
|---|
| 97 | } else {
|
|---|
| 98 | ## Else just print a plain header
|
|---|
| 99 | print "<br /><br /><br /><br />\n";
|
|---|
| 100 | }
|
|---|
| 101 | ?>
|
|---|
| 102 | <div id="speedtest_contents">
|
|---|
| 103 |
|
|---|
| 104 | <?php
|
|---|
| 105 | if ( ($config_auto_size) && (! isset($_GET['auto_size'])) ) {
|
|---|
| 106 | ## auto_size is performing the initial, small test
|
|---|
| 107 | print "<div>Calculating appropriate file sizes for testing</div>\n";
|
|---|
| 108 | ob_flush();
|
|---|
| 109 | } else {
|
|---|
| 110 | ?>
|
|---|
| 111 |
|
|---|
| 112 | <div id="download_message">
|
|---|
| 113 | <center>
|
|---|
| 114 | Conducting Download Test (<?php echo $down_kbytes; ?> kb)
|
|---|
| 115 | <div style="border: 1px solid black; width: <?php echo $progress_bar_width; ?>" align="left" id="download_bar_div">
|
|---|
| 116 | <img src="<?php echo $config->{'general'}->{'image_path'}; ?>bar.gif" width="0;" height="20px;" id="download_bar" />
|
|---|
| 117 | </div>
|
|---|
| 118 | </center>
|
|---|
| 119 | </div>
|
|---|
| 120 |
|
|---|
| 121 | <div id="upload_message" style="visibility: hidden; display:none;">
|
|---|
| 122 | <center>
|
|---|
| 123 | <br /><br />
|
|---|
| 124 | Conducting Upload Test (<?php echo $up_kbytes; ?> kb)
|
|---|
| 125 | <div style="border: 1px solid black; width: <?php echo $progress_bar_width; ?>" align="left" id="upload_bar_div">
|
|---|
| 126 | <img src="<?php echo $config->{'general'}->{'image_path'}; ?>bar.gif" width="0;" height="20px;" id="upload_bar" />
|
|---|
| 127 | </div>
|
|---|
| 128 | </center>
|
|---|
| 129 | </div>
|
|---|
| 130 | </center>
|
|---|
| 131 | <?php } ?>
|
|---|
| 132 |
|
|---|
| 133 | <div id="speedtest_credits">
|
|---|
| 134 | Powered by <a title="Brandon Checketts Fancy Source Speedtest" href="http://www.brandonchecketts.com/speedtest/" target="_new">Fancy Speed Test</a>
|
|---|
| 135 | </div>
|
|---|
| 136 |
|
|---|
| 137 | </div>
|
|---|
| 138 |
|
|---|
| 139 | <?php if (file_exists("footer.html")) { include("footer.html"); } ?>
|
|---|
| 140 |
|
|---|
| 141 | <?php /* Begin JavaScript functions that we'll need */ ?>
|
|---|
| 142 | <script language="javascript">
|
|---|
| 143 | <!--
|
|---|
| 144 | function StartUpload() {
|
|---|
| 145 | uploadDiv = document.getElementById('upload_message');
|
|---|
| 146 | if (uploadDiv) {
|
|---|
| 147 | uploadDiv.style.visibility='visible';
|
|---|
| 148 | uploadDiv.style.display='block';
|
|---|
| 149 | <?php if ($pretty_version) { ?>
|
|---|
| 150 | setInterval("IncrementUploadBar()",200);
|
|---|
| 151 | <?php } ?>
|
|---|
| 152 | }
|
|---|
| 153 | }
|
|---|
| 154 |
|
|---|
| 155 | download_bar_current_width=0;
|
|---|
| 156 |
|
|---|
| 157 |
|
|---|
| 158 | function IncrementDownloadBar() {
|
|---|
| 159 | download_barElement = document.getElementById('download_bar');
|
|---|
| 160 | if (download_barElement) {
|
|---|
| 161 | download_bar_current_width += <?php echo $download_progress_bar_increment; ?>;
|
|---|
| 162 | if (download_bar_current_width <= <?php echo $progress_bar_width; ?>) {
|
|---|
| 163 | download_barElement.style.width = download_bar_current_width +"px";
|
|---|
| 164 | }
|
|---|
| 165 | }
|
|---|
| 166 | }
|
|---|
| 167 |
|
|---|
| 168 | <?php
|
|---|
| 169 | ## This doesn't really measure anything to do with the upload
|
|---|
| 170 | ## It just increments the bar every second to give it some interactivity
|
|---|
| 171 | ## I've considered actually querying the server to figure out the status
|
|---|
| 172 | ## but that would just add extra overhead and make the test less accurate
|
|---|
| 173 | ## So this appears to be the best way for now
|
|---|
| 174 | ?>
|
|---|
| 175 | upload_bar_current_width=0;
|
|---|
| 176 | function IncrementUploadBar() {
|
|---|
| 177 | upload_barElement = document.getElementById('upload_bar');
|
|---|
| 178 | if (upload_barElement) {
|
|---|
| 179 | upload_bar_current_width += <?php echo $upload_progress_bar_increment; ?>;
|
|---|
| 180 | if (upload_bar_current_width < <?php echo $progress_bar_width; ?>) {
|
|---|
| 181 | upload_barElement.style.width = upload_bar_current_width +"px";
|
|---|
| 182 | }
|
|---|
| 183 | }
|
|---|
| 184 | }
|
|---|
| 185 |
|
|---|
| 186 | function CompleteDownloadBar() {
|
|---|
| 187 | download_barElement = document.getElementById('download_bar');
|
|---|
| 188 | if (download_barElement) {
|
|---|
| 189 | download_barElement.style.width = "100%";
|
|---|
| 190 | }
|
|---|
| 191 | }
|
|---|
| 192 |
|
|---|
| 193 |
|
|---|
| 194 | // -->
|
|---|
| 195 | </script>
|
|---|
| 196 |
|
|---|
| 197 |
|
|---|
| 198 | <form id="upload_test_form" name="upload_test" method="POST" action="<?php echo $config->{'general'}->{'upload_url'}; ?>">
|
|---|
| 199 | <input type="hidden" id="upload_data" name="upload_data" value="" />
|
|---|
| 200 |
|
|---|
| 201 | <script language="javascript">
|
|---|
| 202 | <!--
|
|---|
| 203 | dataElement = document.getElementById('upload_data');
|
|---|
| 204 |
|
|---|
| 205 | <?php /* Start the timer */ ?>
|
|---|
| 206 | time = new Date();
|
|---|
| 207 | starttime = time.getTime();
|
|---|
| 208 |
|
|---|
| 209 | <?php
|
|---|
| 210 |
|
|---|
| 211 | if ($pretty_version) {
|
|---|
| 212 | print "
|
|---|
| 213 | //-->
|
|---|
| 214 | </script>
|
|---|
| 215 | ";
|
|---|
| 216 | }
|
|---|
| 217 |
|
|---|
| 218 |
|
|---|
| 219 | ## Read some stuff from our payload file
|
|---|
| 220 | $data_file = "payload.js";
|
|---|
| 221 | $fd = fopen ($data_file, "r");
|
|---|
| 222 | $data = fread ($fd, $each_chunk * 1024);
|
|---|
| 223 |
|
|---|
| 224 | ## Download $extra_down_kbytes first as junk
|
|---|
| 225 | $extra_down_kbytes = $down_kbytes - $up_kbytes;
|
|---|
| 226 | $total_kbytes = 0;
|
|---|
| 227 | while ($total_kbytes <= $extra_down_kbytes) {
|
|---|
| 228 | if ($pretty_version) {
|
|---|
| 229 | print "
|
|---|
| 230 | <script language=\"javascript\">
|
|---|
| 231 | <!--
|
|---|
| 232 | dataElement.value=\"$data\";
|
|---|
| 233 | IncrementDownloadBar();
|
|---|
| 234 | //-->
|
|---|
| 235 | </script>
|
|---|
| 236 | ";
|
|---|
| 237 | } else {
|
|---|
| 238 | print "dataElement.value=\"$data\";\n";
|
|---|
| 239 | }
|
|---|
| 240 | $total_kbytes += $each_chunk;
|
|---|
| 241 | }
|
|---|
| 242 | if (!$pretty_version) {
|
|---|
| 243 | print "dataElement.value=\"$data\";";
|
|---|
| 244 | print "CompleteDownloadBar();\n";
|
|---|
| 245 | } else {
|
|---|
| 246 | print "
|
|---|
| 247 | <script language=\"javascript\">
|
|---|
| 248 | <!--
|
|---|
| 249 | //-->
|
|---|
| 250 | </script>
|
|---|
| 251 | ";
|
|---|
| 252 | }
|
|---|
| 253 |
|
|---|
| 254 | ## Now, download the remaining bytes ($up_kbytes) and save it into a
|
|---|
| 255 | ## form variable that we will post back to test the upload speed
|
|---|
| 256 | while ($total_kbytes <= $down_kbytes) {
|
|---|
| 257 | if ($pretty_version) {
|
|---|
| 258 | print "
|
|---|
| 259 | <script language=\"javascript\">
|
|---|
| 260 | <!--
|
|---|
| 261 | dataElement.value = dataElement.value + \"$data\";
|
|---|
| 262 | IncrementDownloadBar();
|
|---|
| 263 | //-->
|
|---|
| 264 | </script>
|
|---|
| 265 | ";
|
|---|
| 266 | } else {
|
|---|
| 267 | print "dataElement.value = dataElement.value + \"$data\";\n";
|
|---|
| 268 | }
|
|---|
| 269 | $total_kbytes += $each_chunk;
|
|---|
| 270 | }
|
|---|
| 271 |
|
|---|
| 272 | if (!$pretty_version) {
|
|---|
| 273 | #print "\";";
|
|---|
| 274 | } else {
|
|---|
| 275 | print "
|
|---|
| 276 | <script language=\"javascript\">
|
|---|
| 277 | <!--
|
|---|
| 278 | ";
|
|---|
| 279 | }
|
|---|
| 280 | ?>
|
|---|
| 281 | CompleteDownloadBar();
|
|---|
| 282 |
|
|---|
| 283 | time = new Date();
|
|---|
| 284 | endtime = time.getTime();
|
|---|
| 285 | if (endtime == starttime)
|
|---|
| 286 | {downloadtime = 0
|
|---|
| 287 | } else {
|
|---|
| 288 | downloadtime = (endtime - starttime)/1000;
|
|---|
| 289 | }
|
|---|
| 290 | <?php if (! $config->{'upload'}->{'skip_upload'}){ ?> StartUpload(); <?php } ?>
|
|---|
| 291 |
|
|---|
| 292 | down_size = <?php echo $total_kbytes; ?>;
|
|---|
| 293 | downspeed = down_size/downloadtime;
|
|---|
| 294 | downspeed = (Math.round((downspeed*8)*10*1.024))/10;
|
|---|
| 295 |
|
|---|
| 296 | formElement = document.getElementById('upload_test_form');
|
|---|
| 297 |
|
|---|
| 298 | <?php
|
|---|
| 299 | if ($config_auto_size && (! isset($_GET['auto_size'])) ) {
|
|---|
| 300 | $params_auto_size = "&auto_size=1";
|
|---|
| 301 | } else {
|
|---|
| 302 | $params_auto_size = "";
|
|---|
| 303 | }
|
|---|
| 304 | if ($config->{'upload'}->{'skip_upload'} && (! $params_auto_size)) {
|
|---|
| 305 | $next_url = $config->{'general'}->{'base_url'}."results.php";
|
|---|
| 306 | } else {
|
|---|
| 307 | $next_url = $config->{'general'}->{'upload_url'};
|
|---|
| 308 | }
|
|---|
| 309 |
|
|---|
| 310 | ?>
|
|---|
| 311 | formElement.action = '<?php echo $next_url; ?>?downspeed=' + downspeed + '&downtime=' + downloadtime + '&downsize=' + down_size + '<?php echo $params_auto_size; ?>';
|
|---|
| 312 |
|
|---|
| 313 | document.forms[0].submit();
|
|---|
| 314 |
|
|---|
| 315 | // -->
|
|---|
| 316 | </script>
|
|---|
| 317 |
|
|---|
| 318 | </form>
|
|---|
| 319 | </body>
|
|---|
| 320 | </html>
|
|---|