Syntax
int fsockopen ( string hostname, int port [, int errno [, string errstr [, float timeout] ] ] )
Popis
Príkaz jazyka PHP
Iniciuje proudové spojení v internetové (AF_INET, za použití TCP nebo UDP) nebo unixové (AF_UNIX) doméně. Pro internetovou doménu otevře TCP kanál na stroj hostname na port port. hostname v takovém případě může být plně určené doménové jméno nebo IP adresa. Pro spojení UDP musíte explicitně specifikovat protokol předřazením 'udp://' před hostname. V unixové doméně se hostname použije jako cesta k socketu port se pak musí nastavit na 0. Nepovinný parametr timeout se může použít k nastavení time-outu pro systémové volání connect.
Od PHP 4.3.0, pokud jste PHP zkompilovali s podporou OpenSSL, můžete před hostname předřadit 'ssl://' nebo 'tls://' pro použití SSL nebo TSL spojení na vzdálený stroj přes TCP/IP.
fsockopen() vrací deskriptor souboru, který lze použít s jinými souborovými funkcemi (např. fgets, fgetss, fputs, fclose a feof).
Pokud volání selže, vrací funkce FALSE, a pokud jsou přítomny nepovinné parametry errno a errstr, budou nastaveny na aktuální chybovou úroveň v systémovém volání connect(). Je-li vrácená hodnota v errno rovna 0 a funkce vrátila FALSE, znamená to, že chyba nastala před voláním connect(). Nejčastěji je to kvůli problému při inicializaci socketu. Uvědomte si, že argumenty errno a errstr se vždy předávají odkazem.
V závislosti na prostředí nemusí být k dispozici unixová doména nebo volitelný parametr timeout.
Socket se implicitně otevře v blokujícím režimu. Do neblokujícího režimu ho můžete přepnout použitím socket_set_blocking.
Príklady
<?php
$fp =
fsockopen ("www.example.com", 80,
$errno,
$errstr, 30
);
if (!
$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs ($fp,
"GET / HTTP/1.0\r\nHost: www.example.com\r\n\r\n");
while (!
feof($fp)) {
echo fgets ($fp,128
);
}
fclose ($fp);
}
?>
Další (níže uvedený) příklad ukazuje, jak získat datum a čas z UDP služby "daytime" (port 13) na vašem vlastním počítači:
<?php
$fp =
fsockopen("udp://127.0.0.1", 13,
$errno,
$errstr);
if (!
$fp) {
echo "CHYBA: $errno - $errstr<br>\n";
} else {
fwrite($fp,
"\n");
echo fread($fp, 26
);
fclose($fp);
}
?>
Pozri aj
pfsockopen, socket_set_blocking, socket_set_timeout, fgets, fgetss, fputs, fclose, feof