Note that stream_socket_recvfrom() bypasses stream wrappers including TLS/SSL. While reading from an encrypted stream with fread() will return decrypted data, using stream_socket_recvfrom() will give you the original encrypted bytes.(PHP 5, PHP 7, PHP 8)
stream_socket_recvfrom — Lit des données depuis un socket, connecté ou pas
$socket,$length,$flags = 0,&$address = null
stream_socket_recvfrom() accepte les données
depuis un socket distant, jusqu'à un total de length
octets.
socketLe socket distant.
length
Le nombre d'octets à recevoir de socket.
flags
La valeur de flags peut être la combinaison
des constantes suivantes :
STREAM_OOB |
Traite les données en mode OOB (out-of-band).
|
STREAM_PEEK |
Lit des données depuis le socket, mais n'utilise pas le buffer. Les prochains appels à fread() ou stream_socket_recvfrom() liront les mêmes données. |
address
Si le paramètre address est fourni, il
recevra l'adresse du socket distant.
Retourne les données lues, sous forme de chaîne de caractères, ou false si une erreur survient.
Lève une ValueError si length est inférieur à 1.
| Version | Description |
|---|---|
| 8.0.0 |
Lève désormais une ValueError si length est inférieur à 1.
Auparavant, une E_WARNING était émise et false était retournée.
|
Exemple #1 Exemple avec stream_socket_recvfrom()
<?php
/* Ouvre un socket sur le port 1234 de localhost */
$server = stream_socket_server('tcp://127.0.0.1:1234');
/* Accepte une connexion */
$socket = stream_socket_accept($server);
/* Lit un paquet (1500 est la taille classique MTU) de données OOB */
echo "Received Out-Of-Band: '" . stream_socket_recvfrom($socket, 1500, STREAM_OOB) . "'\n";
/* Lit les données normales in-band, mais ne modifie rien */
echo "Data: '" . stream_socket_recvfrom($socket, 1500, STREAM_PEEK) . "'\n";
/* Relit le même paquet, mais vide le buffer. */
echo "Data: '" . stream_socket_recvfrom($socket, 1500) . "'\n";
/* Terminaison */
fclose($socket);
fclose($server);
?>Note:
Si le message reçu est plus grand que
length, les données supplémentaires peuvent être détruites, suivant le type de socket utilisé (par exemple UDP).
Note:
L'appel de stream_socket_recvfrom() sur les flux basés sur le socket, après l'appel de fonctions de flux basé sur un tampon (comme fread() ou stream_get_line()) lit directement les données à partir du socket et évite l'utilisation du tampon avec le flux.
Note that stream_socket_recvfrom() bypasses stream wrappers including TLS/SSL. While reading from an encrypted stream with fread() will return decrypted data, using stream_socket_recvfrom() will give you the original encrypted bytes.This method may return a peer address not compatible with stream_socket_sendto() if in ipv6.
The ip returned by recvfrom is not within brackets ([]), and has the port appended, which makes it look like ::1:1234. To cut it properly, use strrpos()