W3docs

Comprendre les fonctions réseau PHP

Découvrez les fonctions réseau PHP pour résoudre des noms d'hôtes, ouvrir des sockets, et manipuler des adresses IP sans bibliothèques externes.

La connectivité réseau est au cœur de la plupart des applications web : résolution de noms d'hôtes, ouverture de sockets, communication avec d'autres serveurs et validation d'adresses IP. PHP embarque un ensemble de fonctions réseau intégrées qui vous permettent de faire tout cela sans bibliothèques externes. Ce chapitre explique ce que sont ces fonctions, quand utiliser chaque groupe et comment les employer correctement avec des exemples exécutables.

Qu'est-ce que les fonctions réseau PHP ?

Les fonctions réseau PHP sont des fonctions intégrées qui permettent à votre script de communiquer sur un réseau. Avec elles, vous pouvez :

  • Résoudre des noms — transformer un nom d'hôte comme www.example.com en adresse IP (et inversement).
  • Ouvrir des connexions — créer un socket TCP/UDP vers un autre serveur et échanger des octets bruts.
  • Lire et écrire des flux — envoyer une requête et lire la réponse.
  • Travailler avec des adresses IP — convertir entre les chaînes lisibles par l'homme et la forme binaire compacte, pour IPv4 et IPv6.

Comme elles font partie du noyau de PHP, aucun pecl install ni package Composer n'est requis — les fonctions ci-dessous sont toujours disponibles.

Fonctions DNS et de résolution d'hôtes

Avant de vous connecter à un serveur, vous avez généralement besoin de son adresse IP. Ces fonctions gèrent la résolution de noms.

FonctionCe qu'elle fait
gethostbyname()Retourne l'adresse IPv4 d'un nom d'hôte.
gethostbyaddr()Retourne le nom d'hôte pour une adresse IP (résolution inverse).
gethostbynamel()Retourne la liste de toutes les adresses IPv4 d'un nom d'hôte.
checkdnsrr()Vérifie si des enregistrements DNS (A, MX, etc.) existent pour un hôte.
dns_get_record()Récupère l'ensemble des enregistrements DNS d'un hôte.

Un couple courant est gethostbyname() pour obtenir une IP et checkdnsrr() pour vérifier qu'un hôte possède bien des enregistrements DNS — c'est exactement ce que la question d'entraînement ci-dessous demande.

<?php

$host = "localhost";

// Resolve a hostname to its IPv4 address.
$ip = gethostbyname($host);
echo "IP for {$host}: {$ip}\n";

// Reverse lookup: IP back to a hostname.
echo "Host for {$ip}: " . gethostbyaddr($ip) . "\n";

Si un nom ne peut pas être résolu, gethostbyname() retourne la chaîne d'entrée inchangée plutôt que de lever une erreur — comparez toujours le résultat à l'original avant de lui faire confiance.

Fonctions de connexion par socket

Lorsque vous avez besoin d'une connexion brute vers un autre serveur, ouvrez un socket de flux. La fonction moderne et recommandée est stream_socket_client() ; l'ancienne fsockopen() fonctionne encore mais l'API de flux est plus flexible.

FonctionUtilisation
stream_socket_client()Ouvrir une connexion cliente (recommandé).
stream_socket_server()Écouter les connexions entrantes (construire un serveur).
pfsockopen()Ouvrir un socket persistant qui survit entre les requêtes.
fsockopen()Méthode historique pour ouvrir un socket ; préférez la version flux.

Voici une requête HTTP minimale réalisée manuellement via un socket :

<?php

$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);

if (!$fp) {
    echo "Connection failed: {$errstr} ({$errno})\n";
} else {
    $request  = "GET / HTTP/1.1\r\n";
    $request .= "Host: www.example.com\r\n";
    $request .= "Connection: Close\r\n\r\n";

    fwrite($fp, $request);

    while (!feof($fp)) {
        echo fgets($fp, 128); // read the response line by line
    }
    fclose($fp);
}

Cela ouvre une connexion TCP sur le port 80, envoie une requête GET brute et affiche la réponse du serveur. Pour un travail HTTP en conditions réelles, vous écrirez rarement les requêtes à la main — consultez file_get_contents() pour des lectures simples, ou utilisez cURL / Guzzle pour les en-têtes, les redirections et HTTPS.

Fonctions d'E/S de flux

Une fois qu'un socket (ou tout autre flux) est ouvert, ces fonctions lisent et écrivent les octets qui le traversent. Ce sont les mêmes fonctions utilisées pour la gestion des fichiers, car PHP traite les sockets et les fichiers comme des flux.

  • fgets() — lire une ligne.
  • fgetc() — lire un caractère.
  • fread() — lire un nombre fixe d'octets.
  • fwrite() — écrire des données dans le flux.
  • feof() — tester si la fin du flux a été atteinte.

Fonctions de conversion d'adresses IP

Ces fonctions convertissent entre la forme en chaîne (pointée/à deux-points) d'une IP et sa représentation binaire compacte. Elles sont indispensables pour stocker des adresses de manière compacte ou pour les comparer.

FonctionDirectionFamille
inet_pton()chaîne → binaire compactIPv4 et IPv6
inet_ntop()binaire compact → chaîneIPv4 et IPv6
ip2long()chaîne IPv4 → entierIPv4 uniquement
long2ip()entier → chaîne IPv4IPv4 uniquement
<?php

$ip = "192.168.1.1";

// Pack the IPv4 string into binary, then expand it back.
$packed = inet_pton($ip);
echo "Round-trip: " . inet_ntop($packed) . "\n";

// ip2long stores an IPv4 address as a single integer (handy for databases).
$long = ip2long($ip);
echo "As integer: {$long}\n";
echo "Back to string: " . long2ip($long) . "\n";

inet_pton() / inet_ntop() fonctionnent pour IPv4 et IPv6, tandis que ip2long() / long2ip() sont réservés à IPv4. Préférez la paire inet_* lorsque votre code doit gérer IPv6.

Valider des adresses IP

Pour vérifier si une chaîne est une adresse IP valide — par exemple une saisie utilisateur — utilisez filter_var() plutôt qu'une expression régulière écrite à la main :

<?php

$candidates = ["192.168.0.1", "999.1.1.1", "::1"];

foreach ($candidates as $value) {
    $valid = filter_var($value, FILTER_VALIDATE_IP) !== false;
    echo $value . " => " . ($valid ? "valid" : "invalid") . "\n";
}

Cela valide IPv4 et IPv6 en un seul appel ; ajoutez FILTER_FLAG_IPV4 ou FILTER_FLAG_IPV6 pour restreindre la famille.

Quand utiliser ces fonctions ?

  • Protocoles bas niveau — construire un client SMTP, FTP ou TCP personnalisé où vous contrôlez les octets sur le fil.
  • Vérifications de santé de service — vérifier qu'un hôte est résolu (checkdnsrr()) ou qu'un port est accessible (stream_socket_client() avec un délai court).
  • Stockage de données IP — compresser les adresses avec inet_pton() ou ip2long() pour économiser de l'espace et permettre des requêtes par plage.
  • Pour les appels HTTP ordinaires vers des API, préférez cURL ou une bibliothèque cliente ; les fonctions socket sont utiles lorsque vous avez besoin d'un contrôle plus fin que ce qu'elles offrent.

Conclusion

Les fonctions réseau de PHP vous donnent tout, des résolutions DNS aux sockets bruts en passant par la conversion d'IP, sans dépendances externes. Retenez les trois groupes : résoudre un hôte (gethostbyname(), checkdnsrr()), se connecter à lui (stream_socket_client()), et lire/écrire le flux (fgets(), fwrite()). Pour un travail de plus haut niveau, appuyez-vous sur cURL et Guzzle, et ne recourez à ces fonctions que lorsque vous avez besoin d'un contrôle de plus bas niveau.

Entraînement

Pratique
Quelles fonctions sont utilisées en PHP pour obtenir une IP réseau et vérifier une IP réseau, respectivement ?
Quelles fonctions sont utilisées en PHP pour obtenir une IP réseau et vérifier une IP réseau, respectivement ?
Was this page helpful?