萌发想法最初来自meyu开了个api接口可以查看镜像的状态。想实现下无需用户参与,首次自动根据网络情况来选择镜像并且排除状态异常的镜像,这样的话就可以给用户更快速度的同时不会因为某些镜像故障导致无法使用。
主要部分代码如下:
1、index.php (根路径下的,程序主文件)
require_once('global.php');
require_once(SABLOG_ROOT.'include/visits.php');
$REFERER = "";
if($_SERVER['HTTP_REFERER']){
$REFERER = $_SERVER['HTTP_REFERER'];
}else if(($myflag = $_GET['ref'])||$action){
$REFERER = "http://suddymail.org";
}
// 生成镜像列表,使用meyu的api
// 存储在变量$MirrorList里
// 仅在第一次的时候生成
if(strlen($REFERER)<5){
$api=@file_get_contents("http://ip.meyu.net/api.php?api=1,2,4,5,6,7", "r");
//$a = array(电信镜像,网通镜像,联通镜像,美国镜像,德国镜像,新加坡镜像);
$b = array(tel,cnc,uni,us,de,sg);
/*因为我是移动主机 所以去除了移动(2) 你也可以根据需要选择
注意这三行是要对应的 1->电信镜像->tel(你的该镜像二级域名) */
$api = explode (",", $api);
$i = 0;
$j = 2;
$MirrorList = "autourl[1]=\"suddymail.org/\"\n";
foreach ($api as $ip) {
if($ip=="1")
{
$MirrorList = $MirrorList."autourl[$j]=\"".$b[$i].".suddymail.org/\"\n";
$j++;
}
$i++;
}
}
if (!$action) {
$action = 'index';
}
可以参照原来的index.php来修改 这里,主要是判断是否首次登录进行镜像自动选择并实时生成可用镜像列表。
2、模板目录下的index.php模板。
(这里主要是读取起先的镜像列表并且使用js判断是否跳转及选择速度最快的镜像)
<body>
<script type="text/javascript">
i=1
var autourl=new Array()
$MirrorList
function auto(urls){
if(i){
i=0;
top.location = urls+"default.html";
}
}
function run(){
for(var i=1;i<autourl.length;i++) {
document.write("<img src=http://"+autourl[i]+" width=1 height=1 onerror=auto('http://"+autourl[i]+"')>")
}
}
if("$REFERER".toLowerCase().search("suddymail".toLowerCase())>=0){
}else{
run();
}
</script>
<div id="outmain">
这里读取起先设置的mirror List 然后判断选择。
3、.htaccess
最后,就是纯粹为了好看而弄的default.php的静态化标志了。在站点根目录下
# 自动选择最快的镜像
RewriteRule ^default.html$ index.php?ref=auto
增加如下一条。
ok,搞定,收工
代码修改参考了meyu上flashack的meyu 镜像api使用代码及网络上流行的镜像自动选择代码,对此两端代码的作者表示深深的感谢。
ps:使用的时候可以自己照自己的站点的域名修改后使用。
附上样例代码,可参考修改
#1