1
0
mirror of https://github.com/php/doc-de.git synced 2026-04-25 16:08:17 +02:00
Files
2023-09-01 20:14:27 +02:00

277 lines
8.8 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 4e6f0774f03131cbeeb8c21019a690bf97fd22b6 Maintainer: sammywg Status: ready -->
<!-- Reviewed: yes -->
<!-- Rev-Revision: 4e6f0774f03131cbeeb8c21019a690bf97fd22b6 Reviewer: samesch -->
<refentry xml:id="function.fsockopen" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>fsockopen</refname>
<refpurpose>Stellt eine Internet- oder Unix-Domain-Socket-Verbindung her</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>resource</type><type>false</type></type><methodname>fsockopen</methodname>
<methodparam><type>string</type><parameter>hostname</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>port</parameter><initializer>-1</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter role="reference">error_code</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter role="reference">error_message</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type class="union"><type>float</type><type>null</type></type><parameter>timeout</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
Initialisiert eine Socket-Verbindung zu der in
<parameter>hostname</parameter> angegebenen Ressource.
</para>
<para>
PHP unterstützt Ziele in Internet- und Unixdomänen, wie sie unter
<xref linkend="transports"/> beschrieben sind. Eine Liste unterstützter
Transportarten kann auch mittels
<function>stream_get_transports</function> abgerufen werden.
</para>
<para>
Der Socket wird standardmäßig im blockierenden Modus geöffnet. Mit der
Funktion <function>stream_set_blocking</function> kann auf den
nichtblockierenden Modus gewechselt werden.
</para>
<para>
Die Funktion <function>stream_socket_client</function> ist ähnlich, bietet
aber eine umfangreichere Auswahl von Optionen an, einschließlich
blockierungsfreier Verbindungen und der Möglichkeit, einen Stream-Kontext
zu übergeben.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>hostname</parameter></term>
<listitem>
<para>
Ist die OpenSSL-Unterstützung
<link linkend="openssl.installation">installiert</link>, kann dem
Parameter <parameter>hostname</parameter> entweder ein
<literal>ssl://</literal> oder ein <literal>tls://</literal>
vorangestellt werden, um bei der Verbindung zum entfernten Host eine
SSL- oder TLS-Clientverbindung über TCP/IP zu verwenden.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>port</parameter></term>
<listitem>
<para>
Die Portnummer. Diese kann ausgelassen und mit <literal>-1</literal>
übersprungen werden, wenn der Transport keinen Port verwendet, &zb;
<literal>unix://</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>error_code</parameter></term>
<listitem>
<para>
Falls angegeben, enthält der Parameter die Fehlernummer auf
Systemebene, die beim Aufruf der Funktion <literal>connect()</literal>
auftrat.
</para>
<para>
Wenn der Rückgabewert von <parameter>error_code</parameter>
<literal>0</literal> ist und die Funktion &false; zurückgibt, ist dies
ein Zeichen, dass der Fehler vor dem Aufruf von
<literal>connect()</literal> auftrat. Dies ist meist der Fall,
wenn es ein Problem beim Initialisieren des Sockets gibt.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>error_message</parameter></term>
<listitem>
<para>
Die Fehlermeldung als String.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>timeout</parameter></term>
<listitem>
<para>
Der Verbindungs-Timeout in Sekunden. Falls &null;, wird die
&php.ini;-Einstellung
<link linkend="ini.default-socket-timeout">default_socket_timeout</link>
verwendet.
</para>
<note>
<para>
Um einen Timeout für das Lesen oder Schreiben von Daten über den
Socket zu setzen, muss <function>stream_set_timeout</function>
verwendet werden, da der Parameter <parameter>timeout</parameter> von
<function>fsockopen</function> nur für den Verbindungsaufbau mit dem
Socket gedacht ist.
</para>
</note>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Die Funktion <function>fsockopen</function> gibt einen Zeiger auf eine
Datei zurück, der zusammen mit den anderen Dateifunktionen (wie
<function>fgets</function>, <function>fgetss</function>,
<function>fwrite</function>, <function>fclose</function> und
<function>feof</function>) verwendet werden kann. Wenn der Aufruf
fehlschlägt, wird &false; zurückgegeben.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Löst einen Fehler der Stufe <constant>E_WARNING</constant> aus, wenn
<parameter>hostname</parameter> keine gültige Domain ist.
</para>
</refsect1>
<refsect1 role="changelog"><!-- {{{ -->
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
<parameter>timeout</parameter> ist nun nullable (akzeptiert den
&null;-Wert).
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title><function>fsockopen</function>-Beispiel</title>
<programlisting role="php">
<![CDATA[
<?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);
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Eine UDP-Verbindung nutzen</title>
<para>
Das folgende Beispiel zeigt, wie Sie den Tag und die Zeit vom UDP-Service
"daytime" (Port 13) Ihrer Maschine abfragen können.
</para>
<programlisting role="php">
<![CDATA[
<?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);
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Abhängig von der Systemumgebung kann es vorkommen, dass die Unix-Domäne
oder der optionale Verbindungs-Timeout nicht verfügbar sind.
</para>
</note>
<warning>
<para>
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, was bedeutet, dass das Betriebssystem nicht versucht, eine Verbindung
zum Socket herzustellen, solange es nicht wirklich Daten senden oder
empfangen muss.
</para>
</warning>
&ipv6.brackets;
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>pfsockopen</function></member>
<member><function>stream_socket_client</function></member>
<member><function>stream_set_blocking</function></member>
<member><function>stream_set_timeout</function></member>
<member><function>fgets</function></member>
<member><function>fgetss</function></member>
<member><function>fwrite</function></member>
<member><function>fclose</function></member>
<member><function>feof</function></member>
<member><function>socket_connect</function></member>
<member>Die <link linkend="ref.curl">Curl-Erweiterung</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->