LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

PHP更新本地公网IP到阿里云域名解析,实现DDNS

admin
2019年9月5日 23:27 本文热度 2629
<?php
#需要配置的项
define(''ACCESSKEYID'',''AAAAAAAAAAAAAAAA'');                  #阿里云用户密钥ID 获取方法 https://help.aliyun.com/knowledge_detail/38738.html
define(''ACCESSKEYSECRET'',''AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'');#阿里云用户密钥
define(''RR'',''myhome'');                                     #二级域名的记录名 如果是一级 请用@
define(''DOMAIN'',''myhome.baidu.com'');                       #完整域名  
define(''RECORDID'',''11111111111111111'');                    #解析记录ID
/*关键如何获取解析记录ID ,需要在下面这个地址中
https://api.aliyun.com/?spm=a2c4g.11186623.2.26.79ae2846d9RBBa#/?product=Alidns&api=AddDomainRecord&params={}&tab=DEMO&lang=JAVA
先设置一个记录(二级域名) 然后返回结果中获取这个ID 添加记录所需的参数文档在下面这里查看
https://help.aliyun.com/document_detail/29772.html?spm=a2c4g.11186623.4.3.392b5eb4SAeph9

*/

define(''GET_IP_URL'',''myip.fireflysoft.net'');
define(''IP_FILE'',__DIR__. DIRECTORY_SEPARATOR .''ip.txt'');

function 获取HTTP($url)
{
    $curl_samples = curl_init();
    $options = [CURLOPT_URL => $url,CURLOPT_RETURNTRANSFER => 1,CURLOPT_FOLLOWLOCATION => 1,CURLOPT_SSL_VERIFYPEER => 0];
    curl_setopt_array($curl_samples, $options);                
    curl_setopt($curl_samples, CURLOPT_CUSTOMREQUEST, ''GET'');  
    $result = curl_exec($curl_samples);                            
    $info = curl_getinfo($curl_samples); 
    $curl_err = curl_errno($curl_samples);
    curl_close($curl_samples);                                 
    if( 0 != $curl_err )
    {
        echo "getip error:".date(''Y-m-d H:i:s'',time());
        var_dump($info);
        echo PHP_EOL;
        var_dump($result);
        echo PHP_EOL;
        echo $curl_err;
        echo PHP_EOL;
        exit;
    }
    return $result;
}
 
function 编码字符($string)
{
    $result = urlencode($string);
    $result = str_replace([''+'', ''*''], [''%20'', ''%2A''], $result);
    $result = preg_replace(''/%7E/'', ''~'', $result);
    return $result;
}

function 排序参数计算签名($parameters,$method="GET")
{
    ksort($parameters);
    $canonicalizedQuery = '''';
    foreach ($parameters as $key => $value) 
    {
        $canonicalizedQuery .= ''&'' . 编码字符($key) . ''='' . 编码字符($value);
    }
    
    $stringToBeSigned = $method. ''&%2F&''. 编码字符(substr($canonicalizedQuery, 1));
    return base64_encode(hash_hmac(''sha1'', $stringToBeSigned, ACCESSKEYSECRET . ''&'', true));
}

function 获取当前的解析记录值()
{
    #请求dns的API重新做解析
    $api_url = ''https://alidns.aliyuncs.com/?'';
    $data = [];
    #公共参数
    $data[''Format'']          = ''json'';
    $data[''Version'']         = ''2015-01-09'';
    $data[''SignatureMethod''] = ''HMAC-SHA1'';
    $data[''SignatureNonce'']  = uniqid();
    $data[''SignatureVersion'']= ''1.0'';
    $data[''AccessKeyId'']     = ACCESSKEYID; 
    $data[''Timestamp'']       = gmdate("Y-m-d\TH:i:s\Z");
    #专用参数
    $data[''Action'']     = ''DescribeDomainRecordInfo'';
    $data[''RecordId'']   = RECORDID; #解析记录的ID,此参数在添加解析时会返回,在获取域名解析列表时会返回
    #签名
    $data[''Signature'']  = 排序参数计算签名($data);
    #请求接口
    $json = 获取HTTP($api_url . http_build_query($data));
    $result = json_decode($json,true);
    return $result[''Value''];
    
}

function 主函数()
{   
    #获取现在网络的IP
    $ip = 获取HTTP(GET_IP_URL);
    #获取现在域名的解析结果 也就是旧的IP
    $旧IP = 获取当前的解析记录值();
    #对比新旧IP是否一样
    if(!isset($旧IP) || $旧IP !== $ip)
    {
        #请求dns的API重新做解析
        $api_url = ''https://alidns.aliyuncs.com/?'';
        $data = [];
        #公共参数
        $data[''Format'']          = ''json'';
        $data[''Version'']         = ''2015-01-09'';
        $data[''SignatureMethod''] = ''HMAC-SHA1'';
        $data[''SignatureNonce'']  = uniqid();
        $data[''SignatureVersion'']= ''1.0'';
        $data[''AccessKeyId'']     = ACCESSKEYID; 
        $data[''Timestamp'']       = gmdate("Y-m-d\TH:i:s\Z");
        #专用参数
        $data[''Action'']     = ''UpdateDomainRecord'';
        $data[''RecordId'']   = RECORDID; #解析记录的ID,此参数在添加解析时会返回,在获取域名解析列表时会返回
        $data[''RR'']         = RR; #主机记录
        $data[''Type'']       = ''A'';
        $data[''Value'']      = $ip;
        $data[''TTL'']        = 600;
        #$data[''Priority'']   = 10; #MX记录的优先级,取值范围[1,10],记录类型为MX记录时,此参数必须
        $data[''Line'']       = ''default'';
        #签名
        $data[''Signature'']  = 排序参数计算签名($data);
        #请求接口
        $json = 获取HTTP($api_url . http_build_query($data));
        $result = json_decode($json);
        
        #完成以后
        if(isset($result->RecordId)){
            file_put_contents(IP_FILE,$ip);
        }else{
            echo ''error'';
            var_dump($result);
        }
    }else
    {
        echo ''IP没有发生变化,不需要修改解析记录'';
    }
}
主函数();

该文章在 2019/9/5 23:27:09 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved