fsockopen
(PHP 4, PHP 5)
fsockopen — Internet vagy Unix domain socket megnyitása
LeÃrás
Kapcsolatot kezdeményez a célgép felé. A PHP különféle adatátviteli formákat támogat, ezekről bővebben itt: List of Supported Socket Transports. Az aktuális szerveren támpgatott átviteli protokollok listája a stream_get_transports() függvénnyel nyerhető ki.
Note: Amennyiben az socketen keresztüli Ãrás-olvasás idÅ‘túllépési idejét szeretnéd beállÃtani, a stream_set_timeout() függvény segÃtségével teheted meg azt. A fsockopen() függvény timeout paraméterével csak a kapcsolatfelvétel idÅ‘túllépését tudod szabályozni.
A PHP 4.3.0 verziótól kezdve, ha az OpenSSL támogatást befordÃtottad a PHP-be, a hostname elé Ãrhatsz 'ssl://' vagy 'tls://' karaktersorozatot is, ha SSL vagy TLS kliens kapcsolatot szeretnél létesÃteni a TCP/IP felett a távoli hoszttal.
A fsockopen() függvény egy fájl-azonosÃtót ad vissza, ami a rendes fájlkezelÅ‘ parancsokkal együtt használható átlátszó módon. Ezek a következÅ‘ek: fgets(), fgetss(), fwrite(), 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 stream_set_blocking() segÃtségével.
Example#1 fsockopen() Példa
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
Example#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);
}
?>
UDP socketek megnyitásakor bizonyos esetekben nem jön létre hiba, ha a célgép nem elérhetÅ‘. A hiba ekkor csak az Ãrás/olvasás szakaszában bukkan elÅ‘. Ennek az oka az, hogy maga az UDP kapcsolat nem egy hagyományos kapcsolat, ezért az operációs rendszer nem próbál hivatkozást létrehozni egészen addÃg, amÃg konkrét adattovábbÃtásra nincs szükség.
Note: Ipv6 cÃmek megadása esetén azokat szögletes zárójelek közé kell tenni. Példával élve: tcp://[fe80::1]:80
Lásd még: pfsockopen(), stream_set_blocking(), stream_set_timeout(), fgets(), fgetss(), fwrite(), fclose() és feof()!Note: 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Å‘.