这里是记录如何通过PHP来更新Namesilo里面的域名解析,实现自动动态更新。
首先当然你得有Namesilo的域名并且添加过解析了,怎么申请和添加解析就不去讲了,网上多的是。
Namesilo官网:https://www.namesilo.com/
然后,是申请APIkey,登录账号后,在“My account”里面找到”api manager“,进入后,勾选最底下选项后点击”Generate”,就能生成APIkey了,复制保存好。
下面就是在服务器上新建一个php文件,把下面代码放进去,更改成你的内容后,保存
<?php
//修改后面的APIKEY,域名和子域名前缀即可
$ipnow = ipnow(); //获取服务器公网IP
if($ipnow == null || $ipnow == ''){ //判断是否获取成功公网IP
echo 'IP获取失败,稍后再试';
}else{
if(!file_exists(("ipfile.txt")) || filesize("ipfile.txt") ==0){ //判断ip暂存文件是否存在或者是空文件
$ipfile = fopen("ipfile.txt", "w") or die("Unable to open file!");
fwrite($ipfile, $ipnow); //将当前服务器IP写入临时文件,用于后续判断是否更改
fclose($ipfile);
echo updatedns($ipnow);
}else{
$ipfile = fopen("ipfile.txt", "r") or die("Unable to open file!");
$iprecord = fread($ipfile,filesize("ipfile.txt")); //获取ip暂存文件内记录的ip
//echo $iprecord;
if($iprecord == $ipnow){ //如果当前IP与记录的一致时,就不执行更新
echo '现在服务器IP为:'.$iprecord.',没有改变,无需更新!';
fclose($ipfile);
}else{ //反之,更新解析中的ip
$ipfile = fopen("ipfile.txt", "w") or die("Unable to open file!");
echo updatedns($ipnow);
fwrite($ipfile, $ipnow);
fclose($ipfile);
}
}
}
function updatedns($ipnow){
$APIkey = "这里换成你的APIKEY"; //你的namesilo apikey
$domain = "这里放根域名,前面不要加www等前缀,比如baidu.com"; //需要更新的域名
$rrhosts = ['www','img']; //需要更新的子域名前缀数组,在方括号里用英文引号和逗号分隔
$record = "dyn"; //不用改
$rrttl = 3600; //不用改
$results = simplexml_load_string(file_get_contents('https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key='.$APIkey.'&domain='.$domain)); //通过apikey获取到当前域名下面所有解析清单
$test = json_decode(json_encode($results),true); //把获取到的数据转变成数组
$resource_record = $test['reply']['resource_record']; //筛选只获取解析记录清单数组
$record_ids = [];
for($i=0;$i<count($resource_record);$i++){
$record_ids[$resource_record[$i]['host']] = $resource_record[$i]['record_id']; //重新拼接变成新数组:[子域名]=>[record_id]
}
//下面就是循环更新每个子域名解析
for($ii=0;$ii<count($rrhosts);$ii++){
$subdomain = $rrhosts[$ii].'.'.$domain; //拼接成子域名
$recordid = $record_ids[$subdomain]; //获取当前子域名的record_id
$rrhost = $rrhosts[$ii];
return httpGet('https://www.namesilo.com/api/dnsUpdateRecord?version=1&type=xml&key='.$APIkey.'&domain='.$domain.'&rrid='.$recordid.'&rrhost='.$rrhost.'&rrvalue='.$ipnow.'&rrttl='.$rrttl);
}
}
//获取服务器公网IP
function ipnow()
{
$ipnow = httpGet("http://httpbin.org/ip"); //这个网址是获取服务器IP用的,可以更换成其他的接口
$ipnow = json_decode($ipnow,true);
return $ipnow['origin'];
}
//curl方法
function httpGet($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, Array("Content-Type:text/xml; charset=utf-8"));
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
?>
最后,通过访问这个PHP文件,就能实现更新解析的功能啦。比如可以通过宝塔面板里的计划任务,设置定时访问url来自动执行。
评论前必须登录!
注册