怎样用PHP写个测试从用户到WEB服务器带宽的代码????

怎样用PHP写个测试从用户到WEB服务器带宽的代码????
---------------------------------------------------------------

实际上这个很简单的,用任何语言都能实现,主要的奥秘是在JAVASCRIPT中。
思路是:加载一个比较大的图片,在开始时用JAVASCRIPT记录一下时间,加载完毕后再记录一下时间,图片大小是已知的,开始时间和结束时间已是已知的,呵呵,计算带宽就是小学数学问题了。
具体做法如下:
testspeed.php

 1<script language="JavaScript">   
 2<!-- hide script   
 3  
 4function RightNow()   
 5{   
 6var time;   
 7  
 8time = new Date();   
 9return time.getTime();   
10}   
11  
12function CalcSpeed(timeStart)   
13{   
14var timeEnd, timeElapsed, kbytes;   
15  
16timeEnd = RightNow();   
17timeElapsed = (timeEnd - timeStart)/1000 - 0.15;   
18  
19kbytes = 61/timeElapsed   
20  
21document.forms[0].kbytes.value = kbytes;   
22document.forms[0].submit();   
23  
24}   
25  
26// end hide script -->   
27</script>

Testing.....

1<script language="JavaScript">   
2<!-- hide script   
3timeStart = RightNow();   
4// end hide script -->   
5</script>
1<img height="1" onload="CalcSpeed(timeStart);" src="images/62816bytes.gif" width="1"/>
1<br/>
1<form action="speedTestResults.php" method="post">
2<input name="kbytes" type="hidden" value=""/>
3</form>

这段程序的关键点在于利用img的onload事件,onload事件在图片加载完毕后触发,然后通过CalcSpeed函数计算下载速率并提交到结果显示页speedTestResults.php。

本例中我用了一个62816字节的白色图片进行下载测试。

当然,看上去可以了,但并不是完美无缺!上面程序在第一次运行时正常,但第二次运行......下载速率超过10M!!!就是你用小猫上网也一样,是小猫变成了老虎?呵呵,不要高兴得太早,小猫还是小猫,是变不成老虎的,这是因为浏览器的缓存帮了倒忙,第二次运行时该图片就在缓存中,浏览器就会直接从你的硬盘上读取,实际上你测试的是硬盘的读取速度!

那么怎么解决这个问题呢,很简单,在图片后写一串随机的query string就可以了。这样就可以骗过浏览器啦!
OK,我们把图片那段改成这样:

1<img src="images/62816bytes.gif?hahaha=&lt;?=time()?"/>

width='1' height='1' onload='CalcSpeed(timeStart);'>

哼哼!小猫的原形就露出来啦!
---------------------------------------------------------------

mark

Published At
Categories with Web编程
Tagged with
comments powered by Disqus