Scripts

Downloadsnelheid meten mbv PHP

Hierbij twee script die ik naar aanleiding van een forum topic in elkaar gesleuteld heb: http://www.phphulp.nl/forum/showtopic.php?id=42221&cat=2 Het nut van de scripts is wellicht vaag, maar voor beginners zijn het twee leuke scripts om een beetje mee te experimenteren. Het bevat zowel php als javascript. Het eerste script meet de verbindingssnelheid van de gebruiker. Er kan ingesteld worden hoeveel data er verstuurd moet worden, meer data zal een nauwkeuriger beeld geven, maar ook langer de verbinding belasten en meer dataverbruik betekeken. Het tweede script heb ik in elkaar geknutseld om je limiet vol te trekken (belgie). Het leuke van dit script is dat deze niet je server volop belast en daarnaast ook niet je verbinding dicht zal trekken. Ook is er een maximum op te geven. Het speedtestvoorbeeld is meegegeven, data genereren lijkt me een beetje zonde.

downloadsnelheid-meten-mbv-php
[b]Speedtest.php[/b]
[code]
<?php
// Hoeveel data genereren? (megabytes)
$fGenerateMegaBytes = 0.5;

// --- Hieronder de functionele code --- \\

$mbFactor = 1024*1024;

$iTotalBytes = 0;

$strEcho = '
<html>
<head><title>Speedtest</title></head>
<script type="text/javascript">

// Sla de data op zodra dit stukje door de browser is geladen.
Start = new Date();


window.onload = function(e){
	// Hier wordt door middel van sprintf de hoeveelheid bytes van deze pagina geplaatst.
	var fAmountOfData = %d;
	
	// Deze datum wordt geladen zodra het volledige window geladen is
	var End = new Date();
	
	// Bereken het verschil, getTime levert een timestamp in miliseconden.
	var difference = End.getTime() - Start.getTime();
	
	// Geef een alertbox met informatie
	alert(\'Data: \' + Math.round(fAmountOfData/1024) + \' KB\\n Time: \' + difference/1000 + \' seconds\\n Speed: \' + Math.round(fAmountOfData/(1024*difference/1000)) + \' KB/s\');
}


</script>
<body>';

// Blijf data genereren totdat de limiet bereikt is.
while($iTotalBytes < $fGenerateMegaBytes*$mbFactor)
{
    $strEcho .= 'Regel '.$i.', alweer bytes verstuurd! PHP genereert data voor een speedtest!!! Php genereert data als geen ander :)! Totaal ('.round($iTotalBytes/$mbFactor, 3)." MB)\n<br />";
    
    $iTotalBytes = strlen($strEcho);
}

// Sluit de pagina netjes af
$strEcho .= '</body>
</html>';

// Vervang de %d (getal) door de lengte in bytes
echo sprintf($strEcho, strlen($strEcho) );

?>
[/code]

[b]datagenerator.php[/b]
[code]
<?php
// wat is je download snelheid ongeveer, of met welke snelheid wil je downloaden? (megabytes/seconde)
$iDownspeed = 0.1;

// Hoeveel megabytes downloaden per keer?
$iPulseMegaBytes = 1;

// Hoeveel data genereren per keer, dus voor een refresh? (megabytes)
$iGenerateMegaBytes = 5;

// Hoeveel data genereren in totaal? (megabytes)
$iTotalMegaBytes = 75;

// De regel die geoutput moet worden, wordt alleen gebruikt voor schatting
// Geen replace gebruikt ivm performance
// Regel eventueel ook aanpassen in code
$strApproxOutputdata = 'Regel xxx, alweer bytes verstuurd! Weg met de downloadlimieten in Belgie! Php genereert data als geen ander :)! Totaal (x.xxx'." MB)\n<br />";


// --- Hieronder de functionele code --- \\

if(isset($_GET['sendbytes'])){
	$mbytes = intval($_GET['sendbytes']);
	$sendmbytes = intval($_GET['sendbytes']);
}else{
	$mbytes = 0;
	$sendmbytes = 0;
}

$mbFactor = 1024*1024;
$fRowlength = strlen($strApproxOutputdata)/ $mbFactor;
$iGenerateTimes = ceil($iGenerateMegaBytes / $fRowlength);
$iApproxTimeout = ceil($iPulseMegaBytes / $iDownspeed);

for($i = 1; $i <= $iGenerateTimes; $i++)
{
    $mbytes += $fRowlength;
    echo 'Regel '.$i.', alweer bytes verstuurd! Weg met de downloadlimieten in Belgie! Php genereert data als geen ander :)! Totaal ('.round($mbytes, 3)." MB)\n<br />";
    
    if($iDownspeed == 0 || ($mbytes - $sendmbytes) > $iPulseMegaBytes){
    	// Vernieuw de timeout
    	set_time_limit(30);
    	
	    if($iDownspeed > 0){
	    	// Wacht met genereren tijdens verzenden verzenden
	    	sleep($iApproxTimeout);
	    	
	    	$sendmbytes = $mbytes;
	    }
	    
	    flush();
    }
}

if($iTotalMegaBytes > $mbytes){
	// Echo een metarefresh
	echo '<meta http-equiv="refresh" content="0;url='.$_SERVER['PHP_SELF'].'?&sendbytes='.$mbytes.'&code='.md5(rand()).'">';
}
?> 
[/code]

Reacties

0
Nog geen reacties.