Maison  >  Article  >  développement back-end  >  Comment envoyer un ping à un port de serveur distant en PHP ?

Comment envoyer un ping à un port de serveur distant en PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-18 12:09:31598parcourir

How to Ping a Remote Server Port in PHP?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn