|
fsockopen
(PHP 4, PHP 5) fsockopen — Stellt eine Internet- oder Unix-Domain-Socket-Verbindung her
Beschreibung
resource fsockopen
( string $hostname
[, int $port = -1
[, int &$errno
[, string &$errstr
[, float $timeout = ini_get("default_socket_timeout")
]]]] )
PHP unterstützt Ziele im Internet und Unixdomänen, wie sie unter Liste der unterstützten Socket-Transporter
beschrieben sind. Eine Liste unterstützter Transportarten können Sie auch
mittels stream_get_transports() ermitteln.
Der Socket wird standardmäßig im Blocking Mode geöffnet. Sie können auf den
Non-Blocking-Modus wechseln, indem Sie die Funktion stream_set_blocking()
nutzen.
Parameter-Liste
-
hostname
-
Wenn Sie OpenSSL-Support mit einkompiliert haben, können Sie dem Parameter
hostname entweder ein ssl://
oder ein tls:// voranstellen, um eine SSL- oder TLS-Verbindung
aufzubauen, die via TCP/IP mit dem entfernten Server verbunden wird.
-
port
-
Die Portnummer.
-
errno
-
Sofern unterstützt, enthält der Parameter die Fehlernummer des Systemlevels,
die beim Aufruf der connect()-Funktion auftrat.
Wenn der Rückgabewert von errno 0
ist und die Funktion FALSE zurückgibt, ist dies ein Zeichen, dass der
Fehler vor dem connect()-Aufruf auftrat. Dies ist meist
der Fall, wenn es ein Problem beim Initialisieren des Sockets gibt.
-
errstr
-
Die Fehlermeldung als String.
-
timeout
-
Der Connection-Timeout in Sekunden.
Hinweis:
Wenn Sie einen Timeout für das Lesen oder Schreiben von Daten über den
Socket setzen wollen, verwenden Sie stream_set_timeout(),
da der timeout-Parameter von fsockopen()
nur für das reine Konnektieren des Sockets gedacht ist.
Rückgabewerte
Die Funktion fsockopen() gibt einen Zeiger auf eine Datei
zurück, der zusammen mit den anderen Dateifunktionen (wie fgets(),
fgetss(), fwrite(), fclose()
und feof()) verwendet werden kann. Wenn der Aufruf
fehlschlägt, wird FALSE zurückgegeben.
Fehler/Exceptions
Wirft E_WARNING, wenn hostname
keine gültige Domain ist.
Beispiele
Beispiel #1 fsockopen()-Beispiel
<?php $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); } ?>
Beispiel #2 Eine UDP-Verbindung nutzen
Das folgende Beispiel zeigt, wie Sie den Tag und die Zeit vom UDP-Service
"daytime" (Port 13) Ihrer Maschine abfragen können.
<?php $fp = fsockopen("udp://127.0.0.1", 13, $errno, $errstr); if (!$fp) { echo "ERROR: $errno - $errstr<br />\n"; } else { fwrite($fp, "\n"); echo fread($fp, 26); fclose($fp); } ?>
Anmerkungen
Hinweis:
Abhängig von der Systemumgebung kann es vorkommen, dass die Unix-Domäne
oder der optionale Connection-Timeout nicht verfügbar sind.
Warnung
UDP-Sockets werden manchmal ohne die Rückgabe eines Fehlermeldung geöffnet,
obwohl der entfernte Host nicht erreichbar ist. Der Fehler wird nur sichtbar,
wenn Sie Daten vom Socket lesen oder zum Socket schreiben wollen. Der Grund
dafür ist, dass UDP ein "verbindungsloses" Protokoll ist, das bedeutet,
dass das Betriebssystem nicht versucht, eine Verbindung zum Socket herzustellen,
solange es nicht wirklich Daten senden oder empfangen muss.
Hinweis: Wenn Sie eine numerische IPv6-Adresse
angeben, z.B. fe80::1, müssen Sie die IP in eckige Klammern
schreiben, z.B. tcp://[fe80::1]:80.
Siehe auch
- pfsockopen() - Öffnet eine persistente Verbindung zum Internet oder zu einem
Unix-Domainsocket
- stream_set_blocking() - Set blocking/non-blocking mode on a stream
- stream_set_timeout() - Set timeout period on a stream
- fgets() - Liest eine Zeile von der Position des Dateizeigers
- fgetss() - Liest eine Zeile von der Position des Dateizeigers und entfernt HTML Tags.
- fwrite() - Schreibt Binärdaten in eine Datei
- fclose() - Schließt einen offenen Dateizeiger
- feof() - Prüft, ob ein Dateizeiger am Ende der Datei steht
- Die Curl-Erweiterung
|