(PHP 4, PHP 5)
fsockopen — Apre una connessione a un socket appartenente a un dominio Internet o Unix
$hostname
, int $porta
[, int $errno
[, string $errstr
[, float $timeout
]]] )
Inizializza una connessione nel dominio Internet (AF_INET, usando TCP
o UDP) o Unix (AF_UNIX). Per il dominio Internet, apre
una connessione a un socket TCP verso l'
hostname
sulla porta
port
. hostname
può essere
in questo caso, sia un fully qualified domain name o un indirizzo IP.
Per le connessioni UDP, è necessario specificare esplicitamente il
protocollo, usando: 'udp://' come prefisso di
hostname
. Per il dominio Unix,
hostname
viene utilizzato come percorso verso il
socket, in questo caso, porta
deve essere impostato
a 0. Il parametro opzionale timeout
può essere
usato per impostare un timeout in secondi per la chiamata di sistema connect.
A partire da PHP 4.3.0, se si è compilato con il supporto OpenSSL, si può
prefissare hostname
con
'ssl://' oppure 'tls://' per
utilizzare una connessione client SSL o TLS su una connessione TCP/IP per connettersi
all'host remoto.
fsockopen() restituisce un puntatore a file che può essere usato nelle altre funzioni orientate ai file (come fgets(), fgetss(), fputs(), fclose() e feof()).
Se la chiamata non ha successo, viene restituito FALSE
e se gli argomenti opzionali
errno
e errstr
sono presenti, vengono impostati a indicare l'errore
a livello di sistema che è avvenuto nella chiamata alla funzione
connect() del sistema operativo. Se il valore di
errno
restituito è 0 e
la funzione restituisce FALSE
, è un'indicazione che l'errore
è avvenuto prima della chiamata di connect(). Questo è
molto probabilmente legato ad un problema di inizializzazione del socket. Si noti che
gli argomenti errno
e
errstr
verranno sempre passati by
reference.
A seconda dell'ambiente operativo, il dominio Unix o l'opzionale timeout della connect potrebbero non essere disponibili.
Il socket viene aperto di default in modo blocking. Si può passare al modo non-blocking usando socket_set_blocking().
Example #1 Esempio di fsockopen()
<?php
$fp = fsockopen ("www.php.net", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp, "GET / HTTP/1.0\r\nHost: www.php.net\r\n\r\n");
while (!feof($fp)) {
echo fgets ($fp,128);
}
fclose ($fp);
}
?>
Example #2 Uso di connessione UDP
<?php
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
echo "ERRORE: $errno - $errstr<br>\n";
} else {
fwrite($fp,"\n");
echo fread($fp, 26);
fclose($fp);
}
?>
Vedere anche pfsockopen(), socket_set_blocking(), socket_set_timeout(), fgets(), fgetss(), fputs(), fclose(), feof() e l'estensione Curl.Nota:
Il parametro timeout è stato introdotto nel PHP 3.0.9 e il supporto UDP è stato aggiunto nel PHP 4.