Pinger un port de serveur avec PHP
Obtenir l'état de connectivité d'un serveur distant est un aspect crucial de la gestion et des tests du réseau. PHP fournit un moyen simple de cingler une adresse IP et un port à l'aide de la fonction fsockopen(). Cependant, le script existant mentionné dans la question se limite au test de sites Web, et non à des combinaisons IP:port spécifiques.
Pour répondre à ce besoin, nous pouvons exploiter le mécanisme d'établissement de connexion TCP. En essayant d'établir une connexion TCP avec une adresse IP et un port donnés, nous pouvons déduire la disponibilité du serveur. Le code ci-dessous encapsule cette fonctionnalité :
<code class="php"><?php function ping($host, $port, $timeout) { $tB = microtime(true); $fP = fsockopen($host, $port, $errno, $errstr, $timeout); if (!$fP) { return "down"; } $tA = microtime(true); return round((($tA - $tB) * 1000), 0)." ms"; } // Usage example: ping a server at IP address 127.0.0.1, port 80 echo ping("127.0.0.1", 80, 10); ?></code>
Cet extrait de code détermine si un serveur accepte les connexions TCP sur le port spécifié. Si une connexion est établie dans le délai imparti, la fonction renvoie le temps de réponse ping en millisecondes ; sinon, il renvoie "down" pour indiquer que le serveur est inaccessible.
Pour affiner davantage la réponse, vous pouvez utiliser la fonction pingDomain() fournie dans la réponse acceptée :
<code class="php"><?php function pingDomain($domain){ $starttime = microtime(true); $file = fsockopen ($domain, 80, $errno, $errstr, 10); $stoptime = microtime(true); $status = 0; if (!$file) $status = -1; // Site is down else { fclose($file); $status = ($stoptime - $starttime) * 1000; $status = floor($status); } return $status; } // Usage example: ping a server at domain name example.com echo pingDomain("example.com"); ?></code>
En tirant parti des fonctions de socket de PHP, nous pouvons efficacement envoyer une requête ping aux adresses IP et aux noms de domaine pour tester la connectivité et identifier les hôtes qui ne répondent pas.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!