伺服器上傳大量資料時,TP-Link WR882N 路由器容易當機導致斷網。為解決此問題,開發 PHP 腳本定時檢測網路連線,連續 10 次無法存取指定網站時自動觸發路由器重啟。
<?php
// TP-Link WR882N 管理腳本
function getContent($url) {
$temp = parse_url($url);
$query = isset($temp['query']) ? $temp['query'] : '';
$path = isset($temp['path']) ? $temp['path'] : '/';
$header = array(
"POST {$path}?{$query} HTTP/1.1",
"Host: {$temp['host']}",
"Content-Type: text/xml; charset=utf-8",
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Cookie: Authorization=Basic ' . base64_encode("admin:admin"),
"Referer: https://{$temp['host']}/",
'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)',
"Content-length: 380",
"Connection: Close"
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($curl);
curl_close($curl);
return $content;
}
function getIp() {
$content = getContent("https://192.168.1.1/userRpm/StatusRpm.htm");
preg_match('/wanPara=new Array\((.+?)<\/script>/s', $content, $all);
$ip = "0";
if(!empty($all[1])) {
$data = trim($all[1]);
$data = str_replace("\r\n", "", $data);
$data = explode(",", $data);
$ip = str_replace('"', '', $data[2]);
$ip = trim($ip);
}
return $ip;
}
function reboot() {
$url = "https://192.168.1.1/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7";
getContent($url);
}
$info = getIp();
echo $info;
?>
⚠️ 此腳本專為 WR882N 設計,其他型號未測試。實際部署時需加入網路檢測邏輯(如 ping 指定網站)與排程任務(crontab)實現自動化監控。