-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathremote-files.xml
116 lines (113 loc) · 3.87 KB
/
remote-files.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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a0ae28d3bc85f927c22649ebd9a590b921534b7d Maintainer: samesch Status: ready -->
<!-- Reviewed: yes Maintainer: samesch -->
<chapter xml:id="features.remote-files" xmlns="http://docbook.org/ns/docbook">
<title>Zugriff auf entfernte Dateien</title>
<para>
Wenn <parameter>allow_url_fopen</parameter> in der &php.ini; aktiviert ist,
können <acronym>HTTP</acronym>- und <acronym>FTP</acronym>-URLs bei den
meisten Funktionen verwendet werden, die einen Dateinamen als Parameter
benötigen. Darüber hinaus können URLs in <function>include</function>-,
<function>include_once</function>-, <function>require</function>- und
<function>require_once</function>-Anweisungen verwendet werden
(<option>allow_url_include</option> muss dafür aktiviert sein). Weitere
Informationen zu den Protokollen, die von PHP unterstützt werden, finden
Sie im Abschnitt <xref linkend="wrappers"/>.
</para>
<para>
Beispielsweise kann damit eine Datei auf einem anderen Webserver geöffnet
und nach benötigten Daten analysiert werden. Diese Daten können zur Abfrage
einer Datenbank verwendet werden oder passend zum Rest der eigenen Website
ausgegeben werden.
</para>
<para>
<example>
<title>Den Titel einer entfernten Seite auslesen</title>
<programlisting role="php">
<![CDATA[
<?php
$datei = fopen ("http://www.example.com/", "r");
if (!$datei) {
echo "<p>Datei konnte nicht geöffnet werden.\n";
exit;
}
while (!feof ($datei)) {
$zeile = fgets ($datei, 1024);
/* Funktioniert nur, wenn Titel und title-Tags in einer Zeile stehen */
if (preg_match ("@\<title\>(.*)\</title\>@i", $zeile, $treffer)) {
$title = $treffer[1];
break;
}
}
fclose($datei);
?>
]]>
</programlisting>
</example>
</para>
<para>
Auch eine Datei auf einem FTP-Server kann geschrieben werden, vorausgesetzt
man ist als Benutzer mit entsprechenden Zugriffsrechten angemeldet. Auf
diesem Weg können nur neue Dateien angelegt werden. Falls Sie versuchen
eine schon existierende Datei zu überschreiben, wird der
<function>fopen</function>-Aufruf fehlschlagen.
</para>
<para>
Um sich statt als 'anonymous' als anderer Benutzer anzumelden, muss ein
Benutzername (und möglicherweise ein Passwort) innerhalb der URL angegeben
werden, z. B.
'<literal>ftp://benutzer:[email protected]/pfad/zur/datei</literal>'.
Dieselbe Syntax kann verwendet werden, um auf Dateien via
<acronym>HTTP</acronym> zuzugreifen, wenn diese eine
Basic-Authentifizierung benötigen.
</para>
<para>
<example>
<title>Daten auf einen entfernten Server speichern</title>
<programlisting role="php">
<![CDATA[
<?php
$datei = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$datei) {
echo "<p>Datei konnte nicht zum schreiben geöffnet werden.\n";
exit;
}
/* Schreibe die Daten hier hin. */
fputs ($datei, $_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($datei);
?>
]]>
</programlisting>
</example>
</para>
<para>
<note>
<para>
Obiges Beispiel könnte dazu verleiten, dieses Verfahren zu verwenden, um
in eine entfernte Log-Datei zu schreiben. Das würde aber leider nicht
funktionieren, weil der <function>fopen</function>-Aufruf fehlschlagen
würde, wenn die entfernte Datei bereits existiert. Für eine
dezentralisierte Protokollierung sollten Sie sich die Funktion
<function>syslog</function> anschauen.
</para>
</note>
</para>
</chapter>
<!-- 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:
-->