Ce face stream_socket_client
stream_socket_client este varianta modernă a lui fsockopen. Adresa se scrie dintr-o bucată: tcp://127.0.0.1:6379, tls://smtp.exemplu.ro:465, unix:///run/php/aplicatie.sock.
În plus față de fsockopen, primește un context de stream (de exemplu opțiunile ssl pentru certificate) și flag-uri: STREAM_CLIENT_ASYNC_CONNECT pentru conectare fără așteptare, STREAM_CLIENT_PERSISTENT pentru conexiune persistentă.
Parametri
| Parametru | Descriere |
|---|---|
$address |
Adresa completă, cu transport și port: tcp://gazda:port. |
$error_code |
Opțional. Variabilă pentru codul erorii. |
$error_message |
Opțional. Variabilă pentru mesajul erorii. |
$timeout |
Opțional. Secundele de așteptare pentru conectare. |
$flags |
Opțional. STREAM_CLIENT_CONNECT (implicit), STREAM_CLIENT_ASYNC_CONNECT, STREAM_CLIENT_PERSISTENT. |
$context |
Opțional. Un context creat cu stream_context_create. |
Ce returnează
Un stream conectat sau false la eșec (cu avertisment).
Exemple
Exemplul 1: Client pentru un server local
<?php
$server = stream_socket_server("tcp://127.0.0.1:0");
$adresa = stream_socket_get_name($server, false);
$client = stream_socket_client("tcp://$adresa", $cod, $mesaj, 2);
$conexiune = stream_socket_accept($server);
fwrite($client, "PING\n");
echo "Server: " . fgets($conexiune);
fwrite($conexiune, "PONG\n");
echo "Client: " . fgets($client);
Rezultat
Server: PING
Client: PONG
Exemplul 2: Conexiune criptată la un server SMTP
<?php
$context = stream_context_create(["ssl" => ["verify_peer" => true]]);
$smtp = stream_socket_client("tls://smtp.exemplu.ro:465", $cod, $mesaj, 5, STREAM_CLIENT_CONNECT, $context);
if ($smtp === false) {
exit("Eroare $cod: $mesaj");
}
echo fgets($smtp);
Rezultat posibil (depinde de server)
220 smtp.exemplu.ro ESMTP gata
Greșeli frecvente
- Uiți transportul sau portul din adresă:
stream_socket_client("smtp.exemplu.ro"). Scrie adresa întreagă:tcp://smtp.exemplu.ro:25. - Folosești
ssl://și dezactiveziverify_peerca să scapi de o eroare de certificat. Conexiunea nu mai e protejată împotriva interceptării.
Comenzi înrudite
fsockopen / pfsockopen: Deschide o conexiune TCP (sau UDP, SSL) către un server și o returnează ca stream, pentru fwrite și fgets.stream_socket_server: Creează un socket de server care ascultă pe o adresă și un port, pentru conexiuni primite cu stream_socket_accept.stream_context_create: Creează un set de opțiuni (metodă, antete, timeout) pentru file_get_contents, fopen și alte funcții de fișier.stream_set_timeout: Stabilește cât timp așteaptă o citire de pe un socket înainte să renunțe.