PHP调用阿里云API实现DDNS
范围
- 本文为使用阿里云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吧