create($zone_identifier, "A", "test.97admin.com", "127.0.0.1"); // $id=$dns->update($zone_identifier, "23f0bb6a9eede8750153b1983af5dacc","A","test.97admin.com","127.0.0.2"); // print_r($id); // $dns->update($zone_identifier, $identifier) // die(); while (true) { $data = ServerTable::select([], [], "", null, 0, ['sort' => false]); $str = []; $ips = $update_node = []; foreach ($data as $val) { $ip = $val['ip']; $port = $val['port']; $status = $this->check($ip, $port); if ($status == 1) { $ips[] = date("Y-m-d H:i:s") . "\t【" . $val['domain'] . "】" . $ip . "可用"; $update_node[] = $val['domain']; echo date("Y-m-d H:i:s") . "\t\t" . $ip . "\t可用\r\n"; } // if ($val['status'] != $status) { ServerTable::update(['status' => $status, "last_check" => date("Y-m-d H:i:s")], ['id' => $val['id']]); if ($status == 1) { if (!$recode_data[$val['domain']]) { $recode = $dns->list_records($zone_identifier, null, $val['domain']); $recode = json_decode(json_encode($recode), true); if ($recode['result'][0]) { $result = $recode['result'][0]; $recode_data[$val['domain']] = $result; } } $result = $recode_data[$val['domain']]; // print_r($result); // die(); if (!$result) {//域名记录不存在,新建 echo date("Y-m-d H:i:s") . "\t\t" . "域名记录【" . $val['domain'] . "】不存在,正在建立\r\n"; $dns->create($zone_identifier, "A", $val['domain'], $val['ip']); sleep(3); $recode = $dns->list_records($zone_identifier, null, $val['domain']); $recode = json_decode(json_encode($recode), true); if ($recode['result'][0]) { $result = $recode['result'][0]; $recode_data[$val['domain']] = $result; echo date("Y-m-d H:i:s") . "\t\t" . "域名记录【" . $val['domain'] . "】新建成功\r\n"; } }else{ if ($result['content'] != $val['ip']) { echo date("Y-m-d H:i:s") . "\t\t" . "域名记录【" . $val['domain'] . "】与数据库不一致,正在更新\r\n"; $dns->update($zone_identifier, $result['id'], "A", $val['domain'], $val['ip']); } } } // } } $sql = implode("','", $update_node); ServerTable::getConnection()->write("update ss_node set node_status='可用' where node_server in ('" . $sql . "')", []); ServerTable::getConnection()->write("update ss_node set node_status='暂不可用' where node_server not in ('" . $sql . "')", []); $str[] = "第" . $i . "次执行完毕\r\n\r\n"; echo implode("\r\n", $str); Curl::post("https://www.phplife.net/ping.php", ['str' => "节点检查结果:\r\n" . implode("\r\n", $ips)]); // file_put_contents("/root/update.txt", implode("\r\n", $str),FILE_APPEND); // file_put_contents("/root/dns.txt", var_export($recode_data)); $i++; sleep(60); } } /** * @param string $ip ip * @param int $port 端口 * @return int 返回状态 */ public function check($ip, $port) { $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_set_nonblock($sock); socket_connect($sock, $ip, $port); socket_set_block($sock); $status = socket_select($r = array($sock), $w = array($sock), $f = array($sock), 10); sleep(2); return $status; } }