之前介绍了DNSPod动态IP解析更新程序,是Python实现的。下面介绍一个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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | <?php header( "Content-type: text/html; charset=utf8" ); class Dns { #Dnspod账户 private $dnspod_user = 'user@example.com' ; #Dnspod密码 private $dnspod_pwd = 'password' ; #Dnspod主域名,注意:是你注册的域名 private $domain = 'example.com' ; #子域名,如www,如果要使用根域名,用@ private $sub_domain = 'www' ; function getMyIp() { try { $ip = file_get_contents ( 'http://www.leadnt.com/tools/ip.php' ); return $ip ; } catch (Exception $e ) { echo $e ->getMessage(); return null; } } function api_call( $api , $data ) { if ( $api == '' || ! is_array ( $data )) { exit ( '内部错误:参数错误' ); } $api = 'https://dnsapi.cn/' . $api ; $data = array_merge ( $data , array ( 'login_email' => $this ->dnspod_user, 'login_password' => $this ->dnspod_pwd, 'format' => 'json' , 'lang' => 'cn' , 'error_on_empty' => 'no' )); $result = $this ->post_data( $api , $data ); if (! $result ) { exit ( '内部错误:调用失败' ); } $results = @json_decode( $result , 1); if (! is_array ( $results )) { exit ( '内部错误:返回错误' ); } if ( $results [ 'status' ][ 'code' ] != 1) { exit ( $results [ 'status' ][ 'message' ]); } return $results ; } private function post_data( $url , $data ) { if ( $url == '' || ! is_array ( $data )) { return false; } $ch = @curl_init(); if (! $ch ) { exit ( '内部错误:服务器不支持CURL' ); } curl_setopt( $ch , CURLOPT_URL, $url ); curl_setopt( $ch , CURLOPT_POST, 1); curl_setopt( $ch , CURLOPT_HEADER, 0); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $ch , CURLOPT_SSL_VERIFYPEER, 0); curl_setopt( $ch , CURLOPT_SSL_VERIFYHOST, 0); curl_setopt( $ch , CURLOPT_POSTFIELDS, http_build_query( $data )); curl_setopt( $ch , CURLOPT_USERAGENT, 'LocalDomains_PHP/1.0.0(roy@leadnt.com)' ); $result = curl_exec( $ch ); curl_close( $ch ); return $result ; } public function exec () { $ip = $this ->getMyIp(); $domainInfo = $this ->api_call( 'domain.info' , array ( 'domain' => $this ->domain)); $domainId = $domainInfo [ 'domain' ][ 'id' ]; $record = $this ->api_call( 'record.list' , array ( 'domain_id' => $domainId , 'offset' => '0' , 'length' => '1' , 'sub_domain' => $this ->sub_domain)); if ( $record [ 'info' ][ 'record_total' ] == 0) { $this ->api_call( 'record.create' , array ( 'domain_id' => $domainId , 'sub_domain' => $this ->sub_domain, 'record_type' => 'A' , 'record_line' => '默认' , 'value' => $ip , 'ttl' => '3600' )); } else { if ( $record [ 'records' ][0][ 'value' ] != $ip ) { $this ->api_call( 'record.modify' , array ( 'domain_id' => $domainId , 'record_id' => $record [ 'records' ][0][ 'id' ], 'sub_domain' => $this ->sub_domain, 'record_type' => 'A' , 'record_line' => '默认' , 'value' => $ip )); } else { echo '指向正常' ; } } } } $dns = new Dns(); $dns -> exec (); ?> |
1 | sudo chmod 777 dnspod.php |
加入到定时任务,每个小时执行一次。
1 | vi /etc/crontab |
1 | */55 * * * * root /usr/bin/php /home/pi/dnspod.php >> /home/pi/dnspod.log 2>&1 |