我怎么知道在PHP中IP已连接/正常或与LAN断开?

时间:2018-12-27 09:19:09

标签: php ip lan

我有一个数据库,其中存储了所有IP地址。现在我想知道这些IP地址是已连接/正常还是已断开。我尝试过:

$add     = "example.com";
$result = checkdnsrr($add, "MX"); 
var_dump($result);

其返回布尔值truefalse。但我有未连接DNS的IP地址。但是我怎么知道IP是活动的/正常的/连接的或断开的呢?

2 个答案:

答案 0 :(得分:1)

长时间轮询不正确

据我了解您的问题,您只想检查特定的客户端是否已连接。

您将必须在PHP中设置具有连续循环的cron作业,该循环将由XHR(带有Jquery的AJAX等)设置ld进行长时间轮询。因此,当用户断开连接时,XHR将断开,状态将为<?xml version="1.0" encoding="ISO-8859-15"?> <ORDERS> <ORDER> <COMPANY_CODE>CHU</COMPANY_CODE> <ETABLISSEMENET_CODE>CHU</ETABLISSEMENET_CODE> <FOURNISSEUR>BI</FOURNISSEUR> <DESTINATAIRE>CHUSUDRUN2</DESTINATAIRE> <NUM_COMMANDE_MYTOWER>342</NUM_COMMANDE_MYTOWER> <NUM_COMMANDE_CHU>CMD12345</NUM_COMMANDE_CHU> <INSTRUCTIONS>COLIS</INSTRUCTIONS> <ETAT>4</ETAT> <DATE_DE_COMMANDE>01-01-2018</DATE_DE_COMMANDE> <DATE_DE_DISPONIBILITE>01-01-2018</DATE_DE_DISPONIBILITE> <MONTANT_HT>3695.0</MONTANT_HT> <DATE_DE_CREATION></DATE_DE_CREATION> <POIDS_BRUT>20.0</POIDS_BRUT> <NOMBRE_COLIS>3</NOMBRE_COLIS> 。因此,您可以检查用户是否已连接。 但是,请注意,长轮询确实占用大量资源,因此不受欢迎。

我强烈建议您将go与status = trueset = false等一起使用。

我可以为PHP Cron作业编写代码并解决您的问题,但是对此我不满意Long Polling + Cron Job。

答案 1 :(得分:0)

如果您要检查网站是否还活着,则可以这样做:

$add     = "example.com";
$result = false;
if($fp = fsockopen($add, 80, $errno, $errstr, 10)){
    fclose($fp);
    $result = true;
}
var_dump($result);

//编辑:您是否想知道IP是否存在于您的本地网络中?如果是这样,您可以使用ping之类的方式

function ping($host, $timeout = 1) {
            /* ICMP ping packet with a pre-calculated checksum */
            $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
            $socket  = socket_create(AF_INET, SOCK_RAW, 1);
            socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
            socket_connect($socket, $host, null);

            $ts = microtime(true);
            socket_send($socket, $package, strLen($package), 0);
            if (socket_read($socket, 255))
                    $result = microtime(true) - $ts;
            else    $result = false;
            socket_close($socket);

            return $result;
}

$present = ping('192.168.0.100');