使用PHP fsockopen或cURL检查服务器是否正在运行

时间:2016-03-26 11:05:35

标签: php curl fsockopen

我在我的托管网站上运行cron中的一个小PHP脚本,以检查我的服务器是否启动并运行,如果不在家。想检查3个内部(本地)IP地址,所以我在路由器中有端口转发到:

端口80上的

192.168.0.2 端口62000上的192.168.0.200 端口63000上的192.168.0.201

我刚刚随机选择的两个最后一个端口。

在远程计算机上,我在网络浏览器中尝试http://xx.xx.xx.xxhttp://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;
}

0 个答案:

没有答案