PHP调用阿里云API实现DDNS(二)调用阿里云API

范围

  • 本文为使用阿里云API实现DDNS的PHP描述,的第二部分,主要包含:
    – 安装引用阿里云SDK
    – 思路
    – 获取当前阿里云指定前缀的域名解析记录
    – 判断当前公网IP是否和上次修改的解析地址一样
    – 设置IP
  • 准备工作:
    – 阿里云域名
    – 本地服务器
    – 公网IP(听说只有电信可以申请公网IP)
  • 借鉴思路:
    https://www.52pojie.cn/forum.php?mod=viewthread&tid=783673&page=1

思路

  • 获取服务器的公网IP,定时运行PHP脚本调用阿里云API进行域名解析,实现DDNS
  • 为了减少阿里云API的访问,每次成功修改解析后在本地txt记录下来修改的地址,下次运行的时候先检测本地的txt,如果相等就直接结束任务

安装阿里云SDK

https://github.com/aliyun/openapi-sdk-php/blob/master/docs/zh/1-Installation.md
直接下载ZIP解压到脚本所在目录

获取阿里云指定二级域名的当前解析记录

function GetAlibabaIP()
{
    AlibabaCloud::accessKeyClient('LTAImwlA4y6LSkxO', 'w4UTIh77QpNwOEI7gRmUVkcAMJ3tmP')
        ->regionId('cn-hangzhou') // replace regionId as you need
        ->asDefaultClient();
    try {
        $result = AlibabaCloud::rpc()
            ->product('Alidns')
            // ->scheme('https') // https | http
            ->version('2015-01-09')
            ->action('DescribeDomainRecords')
            ->method('POST')
            ->options([
                'query' => [
                    'DomainName' => "idnmd.top",
                    'PageNumber' => "1",
                    'RRKeyWord' => RRKey,
                ],
            ])
            ->request();
        $arr = $result->toArray();
        return $arr;
        //return $arr["DomainRecords"]["Record"][0]["Value"];
    } catch (ClientException $e) {
        echo $e->getErrorMessage() . PHP_EOL;
    } catch (ServerException $e) {
        echo $e->getErrorMessage() . PHP_EOL;
    }
}

判断指定IP是否和上次修改的解析地址一样

function IsSame($ip){
    $file_path = "ip.txt";
    if(file_exists($file_path)){
    $str = file_get_contents($file_path);//将整个文件内容读入到一个字符串中
    $str = str_replace("\r\n","<br />",$str);
    }
    if($str == $ip)
    {
        return true;
    }
    else
    {
        return false;
    }
}

调用阿里云API修改解析记录

function APIIP($ip, $Record)
{
    AlibabaCloud::accessKeyClient('LTAImwlA4y6LSkxO', 'w4UTIh77QpNwOEI7gRmUVkcAMJ3tmP')
        ->regionId('cn-hangzhou') // replace regionId as you need
        ->asDefaultClient();

    try {
        $result = AlibabaCloud::rpc()
            ->product('Alidns')
            // ->scheme('https') // https | http
            ->version('2015-01-09')
            ->action('UpdateDomainRecord')
            ->method('POST')
            ->options([
                'query' => [
                    'RecordId' => $Record,
                    'RR' => RRKey,
                    'Type' => "A",
                    'Value' => $ip,
                ],
            ])
            ->request();
        return $result->toArray();
    } catch (ClientException $e) {
        echo $e->getErrorMessage() . PHP_EOL;
    } catch (ServerException $e) {
        echo $e->getErrorMessage() . PHP_EOL;
    }
}

修改解析记录并保存进ip.txt

function SetIP($ip, $Record){
    if (count(APIIP($ip, $Record)) > 1) {
        $fp = fopen("ip.txt", "w"); //文件被清空后再写入
        if ($fp) {
            $flag = fwrite($fp, $ip);
            return true;
            if (!$flag) {
                return false;
            }
        }
        fclose($fp);
    }
    else {
        return false;
    }
    
}

github地址

https://github.com/xyhuai/PHP-ALIBABA-DDNS
觉得有用的话STAR吧

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值