-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathfsockopen.xml
276 lines (267 loc) · 8.81 KB
/
fsockopen.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
<?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
-->