(PHP 4, PHP 5, PHP 7, PHP 8)
fsockopen — Ouvre un socket de connexion Internet ou Unix
$hostname,$port = -1,&$error_code = null,&$error_message = null,$timeout = null
   Initialise une connexion par socket à la ressource spécifiée par
   hostname.
  
PHP supporte les cibles dans les domaines Internet et Unix comme décrit dans Liste des modes de transport de sockets disponibles. Une liste des types de transports peut également être trouvée en utilisant la fonction stream_get_transports().
Le socket sera ouvert par défaut en mode bloquant. Vous pouvez changer de mode en utilisant : stream_set_blocking().
La fonction stream_socket_client() est similaire mais fournit plus d'options, incluant la connexion non-bloquante et la possibilité de fournir un contexte de flux.
hostname
       Si le support OpenSSL est
       installé, vous pouvez préfixer hostname
       avec ssl:// ou tls:// pour utiliser
       une connexion cliente SSL ou TLS sur TCP/IP pour vous connectez à l'hôte
       distant.
      
port
       Le numéro du port. Ce paramètre peut être omis et ignoré
       en utilisant la valeur -1 pour les transports
       qui n'utilisent pas les ports, comme unix://.
      
error_code
       Si fourni, contient le numéro de l'erreur système qui survient
       lors de l'appel système à connect().
      
       Si la valeur retournée par error_code est
       0 et que la fonction retourne false, ce peut
       être une indication laissant penser que l'erreur est survenue
       avant l'appel à connect(). La plupart du temps,
       cela est du à un problème d'initialisation du socket.
      
error_messageLe message d'erreur, sous la forme d'une chaîne de caractères.
timeout
       Le délai d'attente maximal, en secondes. Si null le paramètre php.ini
       default_socket_timeout est utilisé.
      
Note:
Si vous avez besoin de définir un délai limite pour lire/écrire des données à travers ce socket, utilisez la fonction stream_set_timeout(), car le paramètre
timeoutde la fonction fsockopen() est uniquement appliqué lors de la connexion du socket.
   fsockopen() retourne un pointeur de fichier qui peut
   être utilisé avec d'autres fonctions fichiers, telles
   fgets(), fgetss(),
   fputs(), fclose() et
   feof(). Si l'appel échoue, la fonction retourne
   false.
  
   Lance une alerte de type E_WARNING si le paramètre
   hostname n'est pas un domaine valide.
  
| Version | Description | 
|---|---|
| 8.0.0 | timeoutest désormais nullable. | 
Exemple #1 Exemple avec fsockopen()
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>
Exemple #2 Utilisation d'une connexion UDP
L'exemple ci-dessous décrit comment lire la date et l'heure grâce à un service UDP "daytime" (port 13), sur votre propre machine.
<?php
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
    echo "ERREUR : $errno - $errstr<br />\n";
} else {
    fwrite($fp, "\n");
    echo fread($fp, 26);
    fclose($fp);
}
?>
Note:
Suivant les environnements, le type 'domaine Unix' ou l'option
timeoutne sont pas toujours disponibles.
    Les sockets UDP semblent quelques fois avoir été ouverts sans erreur,
    même si l'hôte distant n'est pas accessible. L'erreur apparaît alors
    uniquement lorsque vous tentez de lire/écrire sur le socket.
    La raison de cela est que UDP est un protocole "connectionless",
    ce qui signifie que le système ne tentera pas d'établir un lien pour le socket
    tant qu'il ne doit pas recevoir/envoyer de données.
   
Note: Lors de la spécification d'adresses IPv6 au format numérique (e.g.
fe80::1) vous devez placer l'adresse IP entre crochets. Par exemple :tcp://[fe80::1]:80.