这里是记录如何通过PHP来更新Namesilo里面的域名解析,实现自动动态更新。
首先当然你得有Namesilo的域名并且添加过解析了,怎么申请和添加解析就不去讲了,网上多的是。
Namesilo官网:https://www.namesilo.com/
然后,是申请APIkey,登录账号后,在“My account”里面找到”api manager“,进入后,勾选最底下选项后点击”Generate”,就能生成APIkey了,复制保存好。

下面就是在服务器上新建一个php文件,把下面代码放进去,更改成你的内容后,保存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
<?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来自动执行。
最新评论