fsockopen

(PHP 4, PHP 5)

fsockopenOuvre un socket de connexion Internet ou Unix

Description

resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )

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.

Liste de paramètres

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.

errno

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 errno 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.

errstr

Le message d'erreur, sous la forme d'une chaîne de caractères.

timeout

Le délai d'attente maximal, en secondes.

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 timeout de la fonction fsockopen() est uniquement appliqué lors de la connexion du socket.

Valeurs de retour

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.

Erreurs / Exceptions

Lance une alerte de type E_WARNING si le paramètre hostname n'est pas un domaine valide.

Historique

Version Description
4.3.0 Ajout du support du paramètre timeout sous les systèmes win32.
4.3.0 Ajout du support SSL et TLS via TCP/IP.

Exemples

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

<?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);
}
?>

Notes

Note:

Suivant les environnements, le type 'domaine Unix' ou l'option timeout ne sont pas toujours disponibles.

Avertissement

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.

Voir aussi

LoadingChargement en cours