(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
socket_recv — Reçoit des données d'un socket connecté
   La fonction socket_recv() reçoit
   length octets de données dans data depuis
   socket. socket_recv() peut être utilisée
   pour récupérer des données depuis des sockets connectés. Aussi, des drapeaux
   permettent de changer le comportement de la fonction.
  
   data est passé par référence, il doit donc être présent
   dans la liste des arguments. Les données reçues depuis la
   socket par socket_recv()
   seront retournées dans data.
  
socket
       socket doit être une instance de Socket
       précédemment créée par socket_create().
      
data
       Les données reçues seront transmises dans
       data. Si une erreur survient, si la connexion
       est fermée ou si aucune donnée n'est disponible,
       data vaudra alors null.
      
length
       Jusqu'à length octets seront lus depuis
       l'hôte distant.
      
flags
       La valeur de flags peut être une combinaison
       des drapeaux suivants, groupés au moyen de l'opérateur binaire
       OR (|).
      
| Flag | Description | 
|---|---|
| MSG_OOB | Traite des données hors de bande. | 
| MSG_PEEK | Reçoit les données depuis le début de la queue sans pour autant les supprimer de la queue. | 
| MSG_WAITALL | Bloque avant qu'au moins lengthsont reçues.
           Cependant, si un signal est intercepté ou si la connexion est
           terminée, la fonction pourra retourner moins de données. | 
| MSG_DONTWAIT | Si ce drapeau est spécifié, la fonction retournera ses données alors qu'en temps normal elle aurait bloqué. | 
   socket_recv() retourne le nombre d'octets reçus,
   ou false si une erreur est apparue. Le code d'erreur actuel peut être
   récupéré en appelant socket_last_error(). Ce code
   d'erreur peut être passé à la fonction socket_strerror()
   pour avoir une représentation textuelle de l'erreur.
  
| Version | Description | 
|---|---|
| 8.0.0 | socketest désormais une instance de Socket ;
  auparavant, c'était une resource. | 
Exemple #1 Exemples avec socket_recv()
Cet exemple est une réécriture de l'exemple pris sur Exemples pour utiliser socket_recv().
<?php
error_reporting(E_ALL);
echo "<h2>TCP/IP Connection</h2>\n";
/* Récupère le port du service WWW. */
$service_port = getservbyname('www', 'tcp');
/* Récupère l'adresse IP de l'hôte cible. */
$address = gethostbyname('www.example.com');
/* Crée un socket TCP/IP. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() a échoué: raison: " . socket_strerror(socket_last_error()) . "\n";
} else {
    echo "OK.\n";
}
echo "Tentative de connexion à '$address' sur le port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
    echo "socket_connect() a échoué.\nRaison: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
    echo "OK.\n";
}
$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connexion: Fermée\r\n\r\n";
$out = '';
echo "Envoi d'une requête HTTP HEAD...";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
echo "Lecture de la réponse:\n\n";
$buf = 'Ceci est mon buffer.';
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
    echo "$bytes octets lus depuis socket_recv(). Fermeture du socket...";
} else {
    echo "socket_recv() a échoué; raison: " . socket_strerror(socket_last_error($socket)) . "\n";
}
socket_close($socket);
echo $buf . "\n";
echo "OK.\n\n";
?>
L'exemple ci-dessus produit un résultat ressemblant à celà:
<h2>TCP/IP Connection</h2> OK. Tentative de connexion à '208.77.188.166' sur le port '80'...OK. Envoi d'une requête HTTP HEAD...OK. Lecture de la réponse: 123 octets lus depuis socket_recv(). Fermeture du socket...HTTP/1.1 200 OK Date: Mon, 14 Sep 2009 08:56:36 GMT Server: Apache/2.2.3 (Red Hat) Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT ETag: "b80f4-1b6-80bfd280" Accept-Ranges: bytes Content-Length: 438 Connexion : Fermée Content-Type: text/html; charset=UTF-8 OK.