我有一个数据库,其中存储了所有IP地址。现在我想知道这些IP地址是已连接/正常还是已断开。我尝试过:
$add = "example.com";
$result = checkdnsrr($add, "MX");
var_dump($result);
其返回布尔值true
或false
。但我有未连接DNS的IP地址。但是我怎么知道IP是活动的/正常的/连接的或断开的呢?
答案 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 = true
和set = 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');