亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

SAE域名綁定設置服務器宕機時自動修改A記錄并飛信通知

2024-05-04 21:48:23
字體:
來源:轉載
供稿:網友

SAE域名綁定之后,一般是用CNAME方式將域名綁定到應用中。但是有時候我們需要用到A記錄(比如說根域名,雖然在DNSPOD上可以設置CNAME記錄,但很可能會影響到MX記錄),而SAE的IP地址經常改變,ping應用二級域名得到的IP沒多久就失效了(前些天網站因此幾天打不開都沒發現,我用的是教育網,自己能打開,但是電信線路變了)。還好DNSPOD有個功能叫D監控,可以幫你監控網站能否正常打開。如果發現宕機,DNSPOD會用郵件、短信、微信等方式提醒你。這里用到的是它的另一個通知方式,那就是URL回調“通過DNSPod 提供的D監控 URL 回調功能,您可以讓宕機或恢復信息提交到您指定的 URL 上,從而更加靈活地處理各種通知信息。”

我們可以通過宕機之后的URL回調取得相關參數,并通過DNSPOD API實現自動修改記錄的功能,再通過飛信發送宕機通知。

代碼在后面,先說設置方法:

1.點此下載代碼,修改其中的參數為你自己的。

2.將代碼上傳到網站。

3.在DNSPOD開啟D監控,在通知設置中回調URL一欄填入monitorCallback.php的地址,如http://blog.gimhoy.com/monitorCallback.php?rHost=hipic.sinaapp.com.其中rHost是SAE的二級域名。并設置回調密鑰。

4.Enjoy~ dnspod-monitor-callback

monitorCallback.php,代碼如下:

  1. /* 
  2. * Copyright 2007-2014 Gimhoy Studio. 
  3. * 
  4. * @author Gimhoy 
  5. * @email contact@gimhoy.com 
  6. * @version 1.0.0 
  7. */ 
  8. $rHost = $_GET['rHost']; // SAE二級域名 
  9. if(emptyempty($rHost)) $rHost = 'sinaapp.com'
  10. $logName = 'monitorLog.txt'//log 文件名 
  11. $logStorDomain = 'log'// Storage Domain 
  12. $FetionNum = ''//飛信登陸號碼 
  13. $FetionPwd = ''//飛信登陸密碼 
  14. $MobileNum = ''//接收通知短信的號碼 
  15. $callback_key = 'MYKEY'// 添加監控時設置的密鑰 
  16.  
  17. $monitor_id = $_POST['monitor_id']; // 監控編號 
  18. $domain_id = $_POST['domain_id']; // 域名編號 
  19. $domain = $_POST['domain']; // 域名名稱 
  20. $record_id = $_POST['record_id']; // 記錄編號 
  21. $sub_domain = $_POST['sub_domain']; // 主機名稱 
  22. $record_line = $_POST['record_line']; // 記錄線路 
  23. $ip = $_POST['ip']; // 記錄IP 
  24. $status = $_POST['status']; // 當前狀態 
  25. $status_code = $_POST['status_code']; // 狀態代碼 
  26. $reason = $_POST['reason']; // 宕機原因 
  27. $created_at = $_POST['created_at']; // 發生時間 
  28. $checksum = $_POST['checksum']; // 校檢代碼 
  29.  
  30. if (md5($monitor_id$domain_id$record_id$callback_key$created_at) != $checksum) { 
  31. // 非法請求 
  32. echo 'BAD REQUEST'
  33. else { 
  34. // 開始處理 
  35. if ($status == 'Warn' || $status == 'Ok') { 
  36. // 宕機恢復 
  37. $msg = date("Y-m-d H:i:s").' '.$sub_domain.'.'.$domain."(".$record_line." ".$ip.")宕機恢復"
  38. elseif ($status == 'Down') { 
  39. // 宕機 
  40. $msg = date("Y-m-d H:i:s").' '.$sub_domain.'.'.$domain."(".$record_line." ".$ip.")在".$created_at."宕機。宕機原因:".$reason."可用IP:"
  41. $ips = @gethostbyname($rHost); 
  42. include_once 'dnspod.class.php'
  43. $newIP = $ips
  44. $data = array
  45. 'domain_id' => $domain_id
  46. 'record_id' => $record_id
  47. 'sub_domain' => $sub_domain
  48. 'record_type' => 'A'
  49. 'record_line' => $record_line
  50. 'ttl' => '600'
  51. 'value' => $newIP 
  52. ); 
  53. $dnspod = new dnspod(); 
  54. $response = $dnspod->api_call('Record.Modify'$data); 
  55. if(isset($response['status']['code']) && $response['status']['code'] == 1) { 
  56. $msg = $msg.$newIP.'(已切換)'
  57. else { 
  58. $msg = $msg.$newIP.'(切換失敗,錯誤代碼'.$response['status']['code'].')'
  59. //飛信通知 
  60. require_once 'Fetion.class.php'
  61. $fetion = new PHPFetion($FetionNum$FetionPwd); 
  62. $result = $fetion->send($MobileNum$msg); 
  63. if(strpos($result'短信發送成功!') || strpos($result'發送消息成功!')) { $r = "成功。";}else{$r = "失敗。";} 
  64. $s = new SaeStorage(); 
  65. $content = $s -> read($logStorDomain$logName); 
  66. $content = $content.$msg.'。飛信通知'.$r.' 
  67. ';//開源代碼Vevb.com 
  68. $s -> write($logStorDomain$logName$content); 
  69.  
  70. // 處理完成 
  71. echo 'DONE'

dnspod.class.php

  1. /* 
  2. * DNSPod API PHP Web 示例 
  3. * http://www.49028c.com/ 
  4. * 
  5. * Copyright 2011, Kexian Li 
  6. * Released under the MIT, BSD, and GPL Licenses. 
  7. * 
  8. */ 
  9.  
  10. class dnspod { 
  11. public function api_call($api$data) { 
  12. if ($api == '' || !is_array($data)) { 
  13. exit('內部錯誤:參數錯誤'); 
  14. $api = 'https://dnsapi.cn/' . $api
  15. $data = array_merge($dataarray('login_email' => 'DNSPOD登陸賬號''login_password' => 'DNSPOD登陸密碼''format' => 'json''lang' => 'cn''error_on_empty' => 'yes')); 
  16.  
  17. $result = $this->post_data($api$data); 
  18.  
  19. if (!$result) { 
  20. exit('內部錯誤:調用失敗'); 
  21. $results = @json_decode($result, 1); 
  22. if (!is_array($results)) { 
  23. exit('內部錯誤:返回錯誤'); 
  24. if ($results['status']['code'] != 1) { 
  25. exit($results['status']['message']); 
  26. return $results
  27. private function post_data($url$data) { 
  28. if ($url == '' || !is_array($data)) { 
  29. return false; 
  30. $ch = @curl_init(); 
  31. if (!$ch) { 
  32. exit('內部錯誤:服務器不支持CURL'); 
  33. curl_setopt($ch, CURLOPT_URL, $url); 
  34. curl_setopt($ch, CURLOPT_POST, 1); 
  35. curl_setopt($ch, CURLOPT_HEADER, 0); 
  36. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  37. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
  38. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
  39. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
  40. curl_setopt($ch, CURLOPT_USERAGENT, 'Gimhoy Monitor/1.0 (contact@gimhoy.com)'); 
  41. $result = curl_exec($ch); 
  42. curl_close($ch); 
  43. return $result

Fetion.class.php,代碼如下:

  1. header('Content-Type: text/html; charset=utf-8'); 
  2. /** 
  3. * PHP飛信發送類 
  4. * @author quanhengzhuang 
  5. * @version 1.5.0 
  6. */ 
  7. class PHPFetion { 
  8. /** 
  9. * 發送者手機號 
  10. * @var string 
  11. */ 
  12. protected $_mobile
  13. /** 
  14. * 飛信密碼 
  15. * @param string 
  16. */ 
  17. protected $_password
  18. /** 
  19. * Cookie字符串 
  20. * @param string 
  21. */ 
  22. protected $_cookie = ''
  23. /** 
  24. * Uid緩存 
  25. * @var array 
  26. */ 
  27. protected $_uids = array(); 
  28. /** 
  29. * csrfToken 
  30. * @param string 
  31. */ 
  32. protected $_csrfToten = null; 
  33. /** 
  34. * 構造函數 
  35. * @param string $mobile 手機號(登錄者) 
  36. * @param string $password 飛信密碼 
  37. */ 
  38. public function __construct($mobile$password
  39. if ($mobile === '' || $password === ''
  40. return
  41. $this->_mobile = $mobile
  42. $this->_password = $password
  43. $this->_login(); 
  44. /** 
  45. * 析構函數 
  46. */ 
  47. public function __destruct() { 
  48. $this->_logout(); 
  49. /** 
  50. * 登錄 
  51. * @return string 
  52. */ 
  53. protected function _login() 
  54. $uri = '/huc/user/space/login.do?m=submit&fr=space'
  55. $data = 'mobilenum='.$this->_mobile.'&password='.urlencode($this->_password); 
  56. $result = $this->_postWithCookie($uri$data); 
  57.  
  58. //解析Cookie 
  59. preg_match_all('/.*?rnSet-Cookie: (.*?);.*?/si'$result$matches); 
  60. if (isset($matches[1])) 
  61. $this->_cookie = implode('; '$matches[1]); 
  62. $result = $this->_postWithCookie('/im/login/cklogin.action'''); 
  63.  
  64. return $result
  65. /** 
  66. * 獲取csrfToken,給好友發飛信時需要這個字段 
  67. * @param string $uid 飛信ID 
  68. * @return string 
  69. */ 
  70. protected function _getCsrfToken($uid
  71. if ($this->_csrfToten === null) 
  72. $uri = '/im/chat/toinputMsg.action?touserid='.$uid
  73. $result = $this->_postWithCookie($uri''); 
  74. preg_match('/name="csrfToken".*?value="(.*?)"/'$result$matches); 
  75.  
  76. $this->_csrfToten = isset($matches[1]) ? $matches[1] : ''
  77.  
  78. return $this->_csrfToten; 
  79.  
  80. /** 
  81. * 向指定的手機號發送飛信 
  82. * @param string $mobile 手機號(接收者) 
  83. * @param string $message 短信內容 
  84. * @return string 
  85. */ 
  86. public function send($mobile$message) { 
  87. if($message === '') { 
  88. return ''
  89. // 判斷是給自己發還是給好友發 
  90. if($mobile === $this->_mobile) { 
  91. return $this->_toMyself($message); 
  92. else if(strlen($mobile)===11){ 
  93. $uid = $this->_getUid($mobile); 
  94. else { 
  95. $uid=$mobile
  96. return $uid === '' ? $this->_addFriend($mobile) : $this->_toUid($uid$message); 
  97. protected function _getname() { 
  98. $uri = '/im/index/index.action'
  99. $result = $this->_postWithCookie($uri'#'); 
  100. // 匹配 
  101. preg_match('/(.*?)</a>/si'$result$matches); 
  102. return $matches[2]; 
  103. /* 
  104. * 通過手機號增加好友 
  105. * @param string $number 手機號(要加的好友手機) 
  106. * @param string $nickname 你的名字,出現在對方的驗證短信里 
  107. * @param string $buddylist 分組,默認為空 
  108. * @param string $localName 好友屏顯名 
  109. * @return string 
  110. */ 
  111. protected function _addFriend($number) { 
  112. $uri = '/im/user/insertfriendsubmit.action'
  113. $data = 'nickname='. urlencode($this->_getname()).'&buddylist=1&localName=&number='$number .'&type=0'
  114. $result = $this->_postWithCookie($uri$data); 
  115. return $result
  116. /** 
  117. * 獲取飛信ID 
  118. * @param string $mobile 手機號 
  119. * @return string 
  120. */ 
  121. protected function _getUid($mobile
  122. if (emptyempty($this->_uids[$mobile])) 
  123. $uri = '/im/index/searchOtherInfoList.action'
  124. $data = 'searchText='.$mobile
  125. $result = $this->_postWithCookie($uri$data); 
  126. //匹配 
  127. preg_match('/toinputMsg.action?touserid=(d+)/si'$result$matches); 
  128.  
  129. $this->_uids[$mobile] = isset($matches[1]) ? $matches[1] : ''
  130. return $this->_uids[$mobile]; 
  131. /** 
  132. * 向好友發送飛信 
  133. * @param string $uid 飛信ID 
  134. * @param string $message 短信內容 
  135. * @return string 
  136. */ 
  137. protected function _toUid($uid$message) { 
  138. $uri = '/im/chat/sendMsg.action?touserid='.$uid
  139. $csrfToken = $this->_getCsrfToken($uid); 
  140. $data = 'msg='.urlencode($message).'&csrfToken='.$csrfToken
  141. $result = $this->_postWithCookie($uri$data); 
  142. return $result
  143. /** 
  144. * 給自己發飛信 
  145. * @param string $message 
  146. * @return string 
  147. */ 
  148. protected function _toMyself($message) { 
  149. $uri = '/im/user/sendMsgToMyselfs.action'
  150. $result = $this->_postWithCookie($uri'msg='.urlencode($message)); 
  151. return $result
  152. /** 
  153. * 退出飛信 
  154. * @return string 
  155. */ 
  156. protected function _logout() { 
  157. $uri = '/im/index/logoutsubmit.action'
  158. $result = $this->_postWithCookie($uri''); 
  159. return $result
  160. protected function getgroup() { 
  161. $uri = '/im/index/index.action'
  162. $data = 'type=group'
  163. $result = $this->_postWithCookie($uri$data); 
  164. // 匹配 
  165. preg_match_all('/contactlistView.action?idContactList=(d+)/si'$result$matches); 
  166. foreach($matches[1] as $k=>$v){ 
  167. if$k== 0 ){ 
  168. $min = $v
  169. $max = $v
  170. }else if($v!=9998&&$v!=9999){ 
  171. $min = min($min,$v); 
  172. $max = max($max,$v); 
  173. return $max
  174. public function getyou1() { 
  175. $list=$this->getgroup(); 
  176. for($i=0;$i<=$list;$i++){ 
  177. $uri = '/im/index/contactlistView.action'
  178. $data = 'idContactList='.$i.'&type=group'
  179. $result = $this->_postWithCookie($uri$data); 
  180. preg_match('/(.*?)|(.*?)((.*?)/(.*?))/si'$result$listn); 
  181. if(!$listn[2]){continue;} 
  182. $shuchu.=str_replace(" ","",$listn[2])."(".$listn[4].")n"
  183. preg_match('/共(d+)頁/si'$result$zpage); 
  184. preg_match('/共(d+)</a>頁/si'$result$dpage); 
  185. isset($zpage[1]) ? $page=$zpage[1] : $page=$dpage[4]; 
  186. for($j=1;$j<=$page;$j++){ 
  187. $uri = '/im/index/contactlistView.action'
  188. $data = 'idContactList='.$i.'&page='.$j
  189. $result = $this->_postWithCookie($uri$data); 
  190. preg_match_all('/(.*?)</a>/si'$result$matches); 
  191. if(!$matches[1][0]){break;} 
  192. for($x=0;$x<=9;$x++){ 
  193. if(!$matches[1][$x]){continue;} 
  194. $shuchu.=$matches[1][$x]." ".str_replace(" ","",$matches[3][$x])."n"
  195. return $shuchu
  196. public function getyou() { 
  197. $list=$this->getgroup(); 
  198. for($i=0;$i<=$list;$i++){ 
  199. $uri = '/im/index/contactlistView.action'
  200. $data = 'idContactList='.$i.'&type=group'
  201. $result = $this->_postWithCookie($uri$data); 
  202. preg_match('/(.*?)|(.*?)((.*?)/(.*?))/si'$result$listn); 
  203. if(!$listn[2]){continue;} 
  204. $shuchu.=str_replace(" ","",$listn[2])."(".$listn[4].")n"
  205. preg_match('/共(d+)頁/si'$result$zpage); 
  206. preg_match('/共(d+)</a>頁/si'$result$dpage); 
  207. isset($zpage[1]) ? $page=$zpage[1] : $page=$dpage[4]; 
  208. for($j=1;$j<=$page;$j++){ 
  209. $uri = '/im/index/contactlistView.action'
  210. $data = 'idContactList='.$i.'&page='.$j
  211. $result = $this->_postWithCookie($uri$data); 
  212. preg_match_all('/(.*?)</a>/si'$result$matches); 
  213. if(!$matches[1][0]){break;} 
  214. for($x=0;$x<=9;$x++){ 
  215. if(!$matches[1][$x]){continue;} 
  216. $shuchu.=$matches[1][$x]." ".str_replace(" ","",$matches[3][$x])."n"
  217. return $shuchu
  218. /** 
  219. * 攜帶Cookie向f.10086.cn發送POST請求 
  220. * @param string $uri 
  221. * @param string $data 
  222. */ 
  223. protected function _postWithCookie($uri$data
  224. $fp = fsockopen('f.10086.cn', 80); 
  225. fputs($fp"POST $uri HTTP/1.1rn"); 
  226. fputs($fp"Host: f.10086.cnrn"); 
  227. fputs($fp"Cookie: {$this->_cookie}rn"); 
  228. fputs($fp"Content-Type: application/x-www-form-urlencodedrn"); 
  229. fputs($fp"User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1rn"); 
  230. fputs($fp"Content-Length: ".strlen($data)."rn"); 
  231. fputs($fp"Connection: closernrn"); 
  232. fputs($fp$data); 
  233.  
  234. $result = ''
  235. while (!feof($fp)) 
  236. $result .= fgets($fp); 
  237.  
  238. fclose($fp); 
  239.  
  240. return $result

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成网站777色婷婷| 亚洲精品白浆高清久久久久久| 亚洲成人av在线| 国内精品国产三级国产在线专| 国产精品露脸av在线| xx视频.9999.com| 国产免费久久av| 欧美精品在线极品| 亚洲激情久久久| 日韩精品视频在线免费观看| 国产69精品99久久久久久宅男| 国产精品久久久久国产a级| 国产精选久久久久久| 久久久久成人精品| 高清视频欧美一级| 海角国产乱辈乱精品视频| 久久精品99久久久香蕉| 国产主播在线一区| 亚洲自拍偷拍区| 日韩精品中文字幕有码专区| 日本高清+成人网在线观看| 久久久久久久久久久久久久久久久久av| 日韩精品免费在线视频| 久久91精品国产91久久跳| 国产免费观看久久黄| 久久影院免费观看| 日韩av电影手机在线| 亚洲а∨天堂久久精品9966| 日韩有码视频在线| 91久久久在线| 亚洲成人激情在线| 精品一区精品二区| 欧美极品少妇xxxxⅹ裸体艺术| 日韩精品视频三区| 日韩女优人人人人射在线视频| 久久综合久久八八| 国产91成人在在线播放| 亚洲人午夜色婷婷| 欧美性高潮床叫视频| 国产成人在线精品| 亚洲免费视频一区二区| 在线国产精品播放| 亚洲精品乱码久久久久久按摩观| 久久久亚洲影院| 亚洲aaaaaa| 亚洲天堂av电影| 久久人人爽亚洲精品天堂| 国产精品视频久久久| 最近2019年日本中文免费字幕| 欧美精品久久久久久久久久| 成人性生交大片免费观看嘿嘿视频| 欧美日韩福利在线观看| 欧美亚洲成人网| 人妖精品videosex性欧美| 26uuu久久噜噜噜噜| 欧美国产欧美亚洲国产日韩mv天天看完整| 热久久这里只有精品| 亚洲性69xxxbbb| www.美女亚洲精品| yw.139尤物在线精品视频| 国产精品成人免费视频| 国产精品精品视频一区二区三区| 亚洲国产高清福利视频| 日本久久久久久| 欧美中文在线字幕| 一本色道久久88综合日韩精品| 国产在线精品成人一区二区三区| 57pao国产成人免费| 日韩中文字幕在线观看| 91精品国产自产91精品| 日韩在线观看免费av| 在线成人免费网站| 亚洲精品日韩av| 91在线无精精品一区二区| 国产精品夫妻激情| 97国产真实伦对白精彩视频8| 午夜美女久久久久爽久久| 久久久久成人网| 日本成人黄色片| 欧美成人精品三级在线观看| 国产日韩中文字幕在线| 日本中文字幕久久看| 久久最新资源网| 九九九热精品免费视频观看网站| 成人黄色在线免费| 国产精品久久久久久久久久久久久| 91理论片午午论夜理片久久| 亚洲一区二区久久久久久久| 成人激情免费在线| 亚洲激情视频网站| 亚洲国产私拍精品国模在线观看| 狠狠躁夜夜躁人人爽天天天天97| 91av视频在线观看| 欧美亚洲在线视频| 亚洲精品欧美日韩专区| 欧美日韩在线免费| 成人免费网站在线| 国产精品三级网站| 欧美日韩综合视频网址| 亚洲精品美女在线观看播放| 欧美大尺度电影在线观看| 国产精品三级在线| 欧美丰满片xxx777| 国产精品夜色7777狼人| 国产午夜精品理论片a级探花| 国产成人免费av| 国产在线98福利播放视频| 成人网在线免费观看| 亚洲成人动漫在线播放| 成人免费看片视频| 久久色免费在线视频| 日韩精品在线私人| 成人黄色在线观看| 国产精品最新在线观看| 久久成人精品一区二区三区| 欧美激情精品久久久久| 2018中文字幕一区二区三区| 精品国产成人在线| 欧美夫妻性生活xx| 国产一区二区三区在线免费观看| 在线播放日韩欧美| 国产精品爽爽爽爽爽爽在线观看| 欧美日韩精品中文字幕| 亚洲精品美女在线| 久久国产精品久久久久久| 国产精品亚发布| 国产裸体写真av一区二区| 岛国av一区二区三区| 国产精品综合久久久| 日本一区二三区好的精华液| 国产精品精品视频一区二区三区| 色av中文字幕一区| 欧美极品美女视频网站在线观看免费| 成人激情电影一区二区| 午夜免费在线观看精品视频| 日本韩国欧美精品大片卡二| www.欧美视频| 国产日韩在线播放| 亚洲性夜色噜噜噜7777| 欧美激情综合亚洲一二区| 欧美精品www| 欧美成人sm免费视频| 久久99视频精品| 久久精品亚洲一区| 91在线免费看网站| 精品亚洲aⅴ在线观看| 欧美日韩国产999| 国产精品第1页| 国产精品一区av| 亚洲一区亚洲二区亚洲三区| 欧美成人手机在线| 国产一区二区三区丝袜| 国产精品久久久久免费a∨| www.欧美精品| 精品一区二区三区三区| 亚洲free嫩bbb| 精品少妇一区二区30p| 亚洲第一精品夜夜躁人人爽| 国内外成人免费激情在线视频网站| 欧美激情精品在线| 日本精品久久电影| 国产在线a不卡| 亚洲欧美三级伦理| 色综合伊人色综合网站|