Forum und email
fsockopen

fsockopen

(PHP 3, PHP 4, PHP 5)

fsockopen --  Otevře socketové spojení v internetové nebo unixové doméně.

Popis

resource fsockopen ( string target [, int port [, int &errno [, string &errstr [, float timeout]]]] )

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().

Příklad 1. fsockopen() Příklad

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

Příklad 2. Použití UDP spojení

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

Poznámka: Parametr timeout by zaveden v PHP 3.0.9 a podpora UDP v PHP 4.

Viz také pfsockopen(), socket_set_blocking(), socket_set_timeout(), fgets(), fgetss(), fputs(), fclose(), feof() a rozšíření Curl.