Programmation réseau en PHP : des sockets au web scraping

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi la programmation réseau en PHP est accessible et passionnante

\n\n

Quand on entend « programmation réseau », on imagine souvent des développeurs C++ chevronnés manipulant des sockets bas niveau, ou des administrateurs écrivant des scripts Python pour surveiller le réseau. Et PHP ? N'est-il pas simplement destiné à afficher « Hello, World! » sur un site ?

\n\n

En réalité, PHP est un outil puissant pour les communications réseau. Il sait ouvrir des sockets, effectuer des requêtes HTTP, travailler avec WebSocket et même scraper d'autres sites. Et tout cela, sans avoir à installer d'extensions supplémentaires (enfin, presque).

\n\n

Dans cet article, nous allons explorer les techniques clés de la programmation réseau en PHP. Vous apprendrez à créer un client TCP simple, à automatiser des requêtes API, à scraper des sites web et à développer votre propre chat avec WebSocket. C'est parti !

\n\n

1. Les bases des sockets en PHP

\n\n

Les sockets sont un moyen bas niveau de communication entre programmes via le réseau. En PHP, la gestion des sockets se fait via les fonctions de la famille socket_*. Elles sont incluses dans la distribution standard, mais nécessitent parfois l'activation de l'extension sockets dans le fichier php.ini.

\n\n

Création d'un client TCP

\n\n

Écrivons un client simple qui se connecte à un serveur (par exemple, time.nist.gov — le serveur de temps officiel) et lit la réponse :

\n\n
<?php\n$host = 'time.nist.gov';\n$port = 37;\n\n// Création du socket\n$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);\nif ($socket === false) {\n    echo "Impossible de créer le socket : " . socket_strerror(socket_last_error()) . "\\n";\n    exit;\n}\n\n// Connexion\n$result = socket_connect($socket, $host, $port);\nif ($result === false) {\n    echo "Échec de la connexion : " . socket_strerror(socket_last_error($socket)) . "\\n";\n    exit;\n}\n\n// Lecture de 4 octets (temps au format NTP)\n$bytes = socket_read($socket, 4);\nif ($bytes === false) {\n    echo "Erreur de lecture : " . socket_strerror(socket_last_error($socket)) . "\\n";\n    exit;\n}\n\n// Fermeture du socket\nsocket_close($socket);\n\n// Conversion des données binaires en nombre\n$time = unpack('N', $bytes)[1];\n// Le temps NTP commence en 1900, on soustrait 70 ans (en secondes)\n$unix_time = $time - 2208988800;\necho "Heure actuelle (UNIX) : " . date('Y-m-d H:i:s', $unix_time) . "\\n";\n?>
\n\n

Ce code se connecte au serveur de temps, lit 4 octets (l'heure au format NTP) et les convertit en une date lisible. Notez la gestion des erreurs — essentielle en programmation réseau.

\n\n

Création d'un serveur TCP simple

\n\n

Maintenant, créons notre propre mini-serveur qui accepte les connexions et répond « Bonjour, client ! » :

\n\n
<?php\n$host = '127.0.0.1';\n$port = 8080;\n\n$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);\nsocket_bind($server, $host, $port);\nsocket_listen($server, 5);\n\necho "Serveur démarré sur $host:$port\\n";\n\nwhile (true) {\n    $client = socket_accept($server);\n    if ($client === false) {\n        continue;\n    }\n    $msg = "Bonjour, client !\\n";\n    socket_write($client, $msg, strlen($msg));\n    socket_close($client);\n}\nsocket_close($server);\n?>
\n\n

Lancez le script dans un terminal (php server.php), puis connectez-vous via telnet : telnet 127.0.0.1 8080. Vous verrez le message de bienvenue.

\n\n

Astuce : Pour des projets réels, utilisez des bibliothèques comme ReactPHP ou Amp — elles offrent l'asynchronisme et une API pratique.

\n\n

2. Requêtes HTTP avec cURL

\n\n

cURL est le couteau suisse pour les requêtes HTTP en PHP. Il permet de faire des GET, POST, de gérer les cookies, les en-têtes, les proxies et les certificats. L'extension curl est généralement préinstallée.

\n\n

Requête GET basique

\n\n
<?php\n$ch = curl_init('https://api.github.com/repos/php/php-src');\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_USERAGENT, 'PHP Script');\n$response = curl_exec($ch);\n$http_code = curl_getinf                

Blogs

Book Recommendations