fsockopen

(PHP 3, PHP 4 >= 4.0.0)

fsockopen --  Internet vagy Unix domain socket megnyitása

Leírás

int fsockopen (string [udp://]hostnév, int port [, int errno [, string errstr [, double timeout]]])

Stream típusú kapcsolatot kezdeményez egy Internet (AF_INET, TCP vagy UDP protokollal) vagy Unix (AF_UNIX) domain felé. Internet domain megadása esetén TCP kapcsolatot nyit a hostnév paraméterben megadott géppel, a port paraméterben megadott porton. Ez esetben a hostnév lehet domainnév vagy IP cím is. UDP kapcsolat esetén explicit meg kell adni a protokolt a hostnév paraméterben, a következő módon: udp://hostnév. Unix domain esetén a hostnév paraméternek kell tartalmaznia a socket elérési útját, ekkor a port értékének nullának kell lennie. A timeout paraméter opcionális, értéke másodpercekben megadandó.

A fsockopen() függvény egy fájl-azonosítót af vissza, ami a rendes fájlkezelő parancsokkal együtt használható átlátszó módon. Ezek a következőek: fgets(), fgetss(), fputs(), fclose(), és feof()).

Ha a kapcsolatfelvétel meghiúsul, a visszatérési érték FALSE lesz, és amennyiben az errno és errstr opcionális paraméterek meg lettek adva, ezekben visszakapjuk a connect() rendszerhívás hibaértékét és hibaüzenetét. Amennyiben az errno nulla értékkel jön vissza, miközben a függvény értéke is FALSE, akkor a hiba még valahol a connect() rendszerhívás előtt következett be. Ez általában annak köszönhető, hogy valami probléma merül fel már az inicializáció közben. Az errno és errstr argumentumok referenciaként adják vissza a visszatérési értéket.

Bizonyos rendszereken előfordulhat, hogy a Unix domain illetve a timeout nem használható.

Alapesetben a socket blokkolt módban nyílik meg. Amennyiben ez nem megfelelő, ez átkapcsolható a socket_set_blocking() segítségével.

Példa 1. fsockopen() Példa


$fp = fsockopen ("www.php.net", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br>\n";
} else {
    fputs ($fp, "GET / HTTP/1.0\r\n\r\n");
    while (!feof($fp)) {
        echo fgets ($fp,128);
    }
    fclose ($fp);
}
      
A következő példa bemutatja, hogy gyűjthető be a saját gépünkön levő "daytime" nevű, 13-as porton figyelő szolgáltatástól információ.

Példa 2. UDP kapcsolat használata


<?php
$fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr);
if (!$fp) {
    echo "Hiba: $errno - $errstr<br>\n";
} else {
    fwrite($fp,"\n");
    echo fread($fp, 26);
    fclose($fp);
}
?>
     

Megjegyzés: A timeout paraméter a 3.0.9-es verziótól felfele, míg az UDP támogatás csak a 4-es verziókban elérhető.

Lásd még: pfsockopen(), socket_set_blocking(), socket_set_timeout(), fgets(), fgetss(), fputs(), fclose(), és feof()).