• 阿里云修改域名对应的ip地址php实现


    <?php
    date_default_timezone_set("GMT");
    class Ali
    {
    private $accessKeyId = "";//自己的ID
    private $accessSecrec = "";//自己的secrec
    private static $obj = null;
    public static function Obj ()
    {
    if(is_null(self::$obj))
    {
    self::$obj = new self();
    }
    return self::$obj;
    }
    /**
    *获取域名信息列表
    */
    public function DescribeDomainRecords()
    {
    $requestParams = array(
    "Action" => "DescribeDomainRecords",
    "DomainName" => "eu80.com"
    );
    $val = $this->requestAli($requestParams);
    $val = json_decode($val,true);
    return $val;
    }

    /**
    * 更新 ip
    * @param $string
    */
    public function UpdateDomainRecord($second)
    {
    $ip = $this->getIp();
    //判断当前IP是否与配置IP一致,若不一致则进行修改
    $dnsList = $this->DescribeDomainRecords();
    //获取当前二级域名的记录
    foreach ($dnsList["DomainRecords"]['Record'] as $key => $value) {
    if($value["RR"]==$second);
    $dns = $value;
    }
    if($ip != $dns["Value"]){
    $requestParams = array(
    "Action" => "UpdateDomainRecord",
    "RecordId" => $dns["RecordId"],
    "RR" => $dns["RR"],
    "Type" => $dns['Type'],
    "Value" => $ip,
    );
    $val = $this->requestAli($requestParams);
    $this->outPut($val." ".$ip);
    }else{
    echo "当前IP不需要修改";
    }
    }
    private function requestAli($requestParams)
    {
    $publicParams = array(
    "Format" => "JSON",
    "Version" => "2015-01-09",
    "AccessKeyId" => $this->accessKeyId,
    "Timestamp" => date("Y-m-dTH:i:s"),
    "SignatureMethod" => "HMAC-SHA1",
    "SignatureVersion" => "1.0",
    "SignatureNonce" => substr(md5(rand(1,99999999)),rand(1,9),14),
    );

    $params = array_merge($publicParams, $requestParams);
    $params['Signature'] = $this->sign($params, $this->accessSecrec);
    $uri = http_build_query($params);
    $url = 'http://alidns.aliyuncs.com/?'.$uri;
    return $this->curl($url);
    }


    private function getIp()
    {
    $ip = $this->curl("http://httpbin.org/ip");
    $ip = json_decode($ip,true);
    return $ip['origin'];
    }

    private function sign($params, $accessSecrec, $method="GET")
    {
    ksort($params);
    $stringToSign = strtoupper($method).'&'.$this->percentEncode('/').'&';

    $tmp = "";
    foreach($params as $key=>$val){
    $tmp .= '&'.$this->percentEncode($key).'='.$this->percentEncode($val);
    }
    $tmp = trim($tmp, '&');
    $stringToSign = $stringToSign.$this->percentEncode($tmp);

    $key = $accessSecrec.'&';
    $hmac = hash_hmac("sha1", $stringToSign, $key, true);

    return base64_encode($hmac);
    }


    private function percentEncode($value=null)
    {
    $en = urlencode($value);
    $en = str_replace("+", "%20", $en);
    $en = str_replace("*", "%2A", $en);
    $en = str_replace("%7E", "~", $en);
    return $en;
    }

    private function curl($url)
    {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
    $result=curl_exec ($ch);
    return $result;
    }

    private function outPut($msg)
    {
    echo date("Y-m-d H:i:s")." ".$msg.PHP_EOL;
    }
    }
    //绑定 ip 到域名
    Ali::Obj()->UpdateDomainRecord("*");

  • 相关阅读:
    很多Python新手教程
    NYOJ 58 步数最少 【BFS】
    页面背景图像的代码
    1001. 杀死吸引力(3n+1)猜想 (15)(ZJUPAT 数学)
    使用JasperReport+iReport进行Web报表开发
    Android学习路径——Android的四个组成部分activity(一)
    1001
    android 拍照注意问题
    springMVC注解优化
    JDBC batch批处理Statement executeBatch 具体解释
  • 原文地址:https://www.cnblogs.com/sunke/p/5629178.html
Copyright © 2020-2023  润新知