fsockopen

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, fclosefeof).

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