我在我的托管网站上运行cron中的一个小PHP脚本,以检查我的服务器是否启动并运行,如果不在家。想检查3个内部(本地)IP地址,所以我在路由器中有端口转发到:
端口80上的192.168.0.2 端口62000上的192.168.0.200 端口63000上的192.168.0.201
我刚刚随机选择的两个最后一个端口。
在远程计算机上,我在网络浏览器中尝试http://xx.xx.xx.xx和http://xx.xx.xx.xx:62000以及http://xx.xx.xx.xx:63000时得到了完美答案。 Sofar很好。
使用fsockopen来" ping"端口80(192.168.0.2)也很完美。但是当它在62000和63000上尝试这两个时它会超时。然后我尝试使用cURL来查看,如果我通过那个得到任何答案,那就知道机器是否正在运行。但是" $ response = curl_exec($ ch);"完全是空的。
知道为什么在webbrowser通过时可能会出现这种情况?
function ping($host,$port=80,$timeout=6)
{
$fsock = fsockopen($host, $port, $errno, $errstr, $timeout);
if ( ! $fsock )
{
echo "$errstr ($errno)<br />\n";
return FALSE;
}
else
{
return TRUE;
}
fclose($fsock);
}
function ping2($host, $port=80, $request=""){
echo "trying: http://" . $host . ":" . $port . $request."<br>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://" . $host . ":" . $port . $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close'));
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
if($response) return true;
else return false;
}