搭建一个网站测速API接口

发布于 2023-03-10 694 次阅读


该文章恢复至 2020年10月02日 的文章

先前提要:本源码是在网络收集的,并非天天原创!天天只是做了部分修改而已!

这个源码和我上次分享的那个 ping接口 差不多,都是用来测试服务器的响应速度的,只不过它俩测试的方向不太相同。

ping接口 主要是测试服务器的响应延迟,而这个 测速接口 主要是用于测试站点打开速度所要的时间

不过这个 测速接口 会因为服务器或目标站点的不确定因素导致的测试结果不太准,所以测试的数据只能用于参考。

测速接口代码:

<?php
if($_GET['url']==null){
echo "请输入参数!";
exit();
}
if (preg_match('/http:\/\//i', $_GET['url'])|preg_match('/https:\/\//i', $_GET['url'])) {
    echo '不能带http://或https://,只需要输入域名!';
exit();
}
$msg = $_GET['url'];
$host = $msg;
$port = '80';
$num = 2; //Ping次数
$tip = gethostbyname($_GET['url']);
$bip = file_get_contents("http://49.234.72.124:88/ip.php?ip=".$tip);
//获取时间
function mt_f (){
list($usec,$sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec); //微秒加秒
}
function ping_f($host,$port){
$time_s = mt_f();
$ip = gethostbyname($host);
$fp = @fsockopen($host,$port);
if(!$fp)
return '测试超时';
$get = "GET / HTTP/1.1\r\nHost:".$host."\r\nConnect:".$port."Close\r\n";
fputs($fp,$get);
fclose($fp);
$time_e = mt_f();
$time = $time_e - $time_s;
$time = ceil($time * 1000);
return $time;
}
if(ping_f($host,$port)=='测试超时'){
echo '测试超,请检查目标站点是否正常!';
}else{
for($i = 0;$i < $num;$i++){
if($i==0){
$s1=$t.ping_f($host,$port);
}elseif($i == 1){
$s2=$t.ping_f($host,$port);
}
//每次运行中间间隔1S
sleep(1);
//刷新输出缓存
ob_flush();
flush();
}
if($s1>$s2){
echo '最慢:'.$s1."/ms\n最快:".$s2."/ms\n平均:".(($s1-$s2)/2+$s2)."/ms\n响应IP:".$tip."\n地址:".$bip."\n\n注意:这不是ping,只是测试网站的打开速度,所以数据仅供参考!";
}else{
echo '最慢:'.$s2."/ms\n最快:".$s1."/ms\n平均:".(($s2-$s1)/2+$s1)."/ms\n响应IP:".$tip."\n地址:".$bip."\n\n注意:这不是ping,只是测试网站的打开速度,所以数据仅供参考!";
}
}
?>

调用方法:

http://你的域名/shu.php?url=要测试的域名

正常返回:


最慢:165/ms
最快:163/ms
平均:164/ms
响应IP:185.207.153.252
地址:香港cloudie数据中心
测速服务器所在地:美国 洛杉矶

注意:这不是ping,只是测试网站的打开速度,所以数据仅供参考!

原理:

通过PHP的 fsockopen()函数 模拟访问目标站点并将访问的时间记录下来,连续两次达到测试目标站点的打开速度的效果,也就是站点测速啦!(如果说错了欢迎留言更正!)

此作者没有提供个人介绍
最后更新于 2023-03-10