File: file-upload.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (245 lines) | stat: -rw-r--r-- 9,945 bytes parent folder | download
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
<?xml version="1.0" encoding="iso-8859-1"?>
 <chapter id="features.file-upload">
  <title>Steuerung von Dateiuploads</title>

  <sect1 id="features.file-upload.post-method">
   <title>Dateiuploads mit POST</title>

   <simpara>
    PHP kann Dateiuploads mit jedem RFC-1867
    konformen Browser (dazu gehren der Natscape Navigator
    3 oder hher, Microsoft Internet Explorer 3 mit Patch von
    Microsoft oder hher ohne Patch) durchfhren. Es knnen
    sowohl Text- als auch Binrdaten hochgeladen werden.
    Mit PHPs Authentifizierungs- und Dateifunktionen besteht
    volle Kontrolle darber, wer Dateien hochladen darf und was
    mit den Dateien geschehen soll, wenn der Upload beendet ist.
   </simpara>

   <para>
    PHP untersttzt auch Dateiuploads nach der PUT-Methode, die
    beispielsweise vom Netscape Composer und den W3C Amaya
    Clients benutzt wird. Siehe dazu <link linkend="features.file-upload.put-method">PUT-Untersttzung</link>
    fr nhere Informationen.</para>

   <para>
    Eine Maske fr den Dateiuplod kann erstellt werden, indem man
    ein Formular entwirft, was ungefhr so aussieht:

    <example>
     <title>Formular fr den Dateiupload</title>
     <programlisting>
&lt;FORM ENCTYPE=&quot;multipart/form-data&quot; ACTION=&quot;_URL_&quot; METHOD=POST&gt;
&lt;INPUT TYPE=&quot;hidden&quot; name=&quot;MAX_FILE_SIZE&quot; value=&quot;1000&quot;&gt;
Send this file: &lt;INPUT NAME=&quot;userfile&quot; TYPE=&quot;file&quot;&gt;
&lt;INPUT TYPE=&quot;submit&quot; VALUE=&quot;Send File&quot;&gt;
&lt;/FORM&gt;
    </programlisting>
    </example>
    
    Die URL sollte auf eine PHP-Datei verweisen. Das versteckte Feld
    MAX_FILE_SIZE mu dem Dateieingabefeld vorausgehen und den
    Wert der maximal akzeptierten Dateigrsse in Bytes enthalten.
    Bei erfolgreichem Upload des Files werden folgende Variablen definiert:
   </para>
   <para>
    <itemizedlist>
     <listitem>
      <simpara>
       $userfile - Der temporre Name, unter dem die hochgeladene Datei 
       auf demServer gespeichert wurde.
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       $userfile_name - Der ursprngliche Dateiname auf dem System des
       Absenders.
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       $userfile_size - Gre der hochgeladenen Datei in Bytes.
      </simpara>
     </listitem>
     <listitem>
      <simpara>
       $userfile_type - Der Mime-Typ der Datei, wenn dies
       Information zur Verfgung gestellt wird. Ein Beispiel wre
       &quot;image/gif&quot;.
      </simpara>
     </listitem>
    </itemizedlist>
    
    Die Variable &quot;$userfile&quot;  trgt den Namen des 
    Dateifeldes im Formular; im obigen Beispiel haben wir die 
    Bezeichnung &quot;userfile&quot; gewhlt.</para>
    

   <simpara>
    Standardmig werden Dateien in dem vorgegebenen temporren
    Verzeichnis des Servers gespeichert. Dies kann durch das Setzen
    der Umgebungsvariablen <envar>TMPDIR</envar> direkt in der
    Umgebung, in der PHP ausgefhrt wird, gendert werden.
    Ein Setzen des temporren Verzeichnisses durch die Funktion
    <function>putenv</function> innerhalb eines Skriptes
    ist nicht mglich.</simpara>

   <simpara>
    Das PHP-Skript, dem die hochzuladende Datei bergeben wird,
    sollte alle ntigen Anweisungen enthalten, die festlegen, wie mit
    der hochgeladenen Datei verfahren werden soll. Beispielsweise
    kann die $file_size - Variable verwendet werden, um Dateien
    auszusortieren, die zu gross oder zu klein sind. Oder man
    benutzt die $file_type -  Variable, um sich aller Dateien zu entledigen, 
    die nicht bestimmten Typen entsprechen. Auf jeden Fall sollte
    die hochgeladene Datei aus dem temporren Verzeichnis gelscht
    oder an andere Stelle verschoben werden.</simpara>

   <simpara>
    Die Datei wird aus dem temporren Verzeichnis gelscht, sobald
    das Skript abgearbeitet ist, wenn sie nicht verschoben oder
    umbenannt wurde.</simpara></sect1>
 
  <sect1 id="features.file-upload.common-pitfalls">
   <title>Hufige Probleme</title>
   <simpara>
    Der mit MAX_FILE_SIZE eingestellte Wert kann nicht grsser
    sein als der durch die Zeile upload_max_filesize der PHP3.ini (oder
    der entsprechenden Zeile php3_upload_max_filesize in der Apache
    Konfigurationsdatei) festgelegte. Standardmig sind dies
    2 MB.</simpara>
   <simpara>
    Bitte beachten, da der CERN httpd alles abschneidet, was auf 
    das erste Leerzeichen im content-type Mime-Header folgt, den
    er vom Client erhlt. Solange dies der Fall ist, untersttzt der 
    CERN httpd keine Dateiuploads.</simpara>
  </sect1>

  <sect1 id="feature-fileupload.multiple">
   <title>Mehrere Dateien uploaden</title>
   <simpara>
    Es ist mglich, gleichzeitig mehrere Dateien hochzuladen und
    die Upload-Informationen automatisch in Arrays aufgefhrt zu
    erhalten. Dabei mu im HTML-Formular die gleiche Syntax zum 
    bermitteln des Arrays benutzt werden, was man durch verschiedene
    Select- und Checkboxen erreicht.</simpara>
   <note>
    <para>
      Die Untersttzung fr den Upload mehrerer Dateien wurde in 
      Version 3.0.10 hinzugefgt.</para>
    </note>

   <para>
    <example>
     <title>Formular zum Upload mehrerer Dateien</title>
     <programlisting>
&lt;form action=&quot;file-upload.html&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
  Send these files:&lt;br&gt;
  &lt;input name=&quot;userfile[]&quot; type=&quot;file&quot;&gt;&lt;br&gt;
  &lt;input name=&quot;userfile[]&quot; type=&quot;file&quot;&gt;&lt;br&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Send files&quot;&gt;
&lt;/form&gt;
     </programlisting>
    </example></para>

   <simpara>
    Wenn das obige Formular abgeschickt wird, werden die Arrays
    <computeroutput>$userfile</computeroutput>,<computeroutput>$userfile_name</computeroutput> und
    <computeroutput>$userfile_size</computeroutput> fr den globalen
    Bereich, wie in $HTTP_POST_VARS, angeordnet. Jede dieser
    Variablen ist ein numerisch indizierte Array, das aus den
    entsprechenden Werten der bertragenen Dateien besteht.</simpara> 
 
   <simpara>
    Nehmen wir an, die Dateinamen  <filename>/home/test/review.html</filename>
    und <filename>/home/test/xwp.out</filename> werden bertragen. In
    diesem Fall beinhaltet<computeroutput>$userfile_name[0]</computeroutput> 
    den Wert <computeroutput>review.html</computeroutput> und
    <computeroutput>$userfile_name[1]</computeroutput>  enthlt den Wert
    <computeroutput>xwp.out</computeroutput>.
     Genauso enthlt <computeroutput>$userfile_size[0]</computeroutput>
     die Dateigre von <filename>review.html</filename>,  und so weiter.</simpara></sect1>

  <sect1 id="features.file-upload.put-method">
   <title>PUT-Untersttzung</title>

   <para>
    PHP untersttzt die HTTP PUT-Methode, wie sie von Clients wie Netscape
    Composer oder W3C Amaya benutzt wird. PUT-Anfragen sind weitaus
    unkomplizierter als ein Dateiupload und sehen etwa so aus:

    <informalexample><programlisting>
PUT /path/filename.html HTTP/1.1
    </programlisting></informalexample>
   </para>

   <para>
    Das wrde normalerweise bedeuten, da der entfernte Client den
    folgenden Inhalt als /path/filename.html im Webverzeichnisbaum
    speichert. Natrlich ist es keine gute Idee, dass PHP oder
    Apache jeden Benutzer beliebige Dateien berschreiben lassen.
    Um eine solche Anfrage bearbeiten zu knnen, muss der Webserver
    erst angewiesen werden, ein bestimmtes PHP-Skript fr die
    Abarbeitung aufzurufen. Im Apache wird dies durch die
    <emphasis>Script</emphasis> - Direktrive festgelegt. Sie kann
    irgendwo in der Apache-Konfigurationsdatei plaziert werden,
    gebruchlich ist die Plazierung innerhalb einer &lt;Directory&gt;- oder
    &lt;Virtualhost&gt;- Sektion. Eine Zeile wie die folgende erledigt dies:

    <informalexample><programlisting>
Script PUT /put.php3
    </programlisting></informalexample>
   </para>

   <simpara>
    Diese Zeile legt fest, da Apache alle PUT-Anfragen fr URIs, die
    dem Kontext entsprechen, in dem diese Zeile steht, an das put.php3
    Skript weiterleitet. Dies setzt voraus, da PHP aktiv und fr die
    .php3-Dateierweiterung registriert ist.
   </simpara>
   <simpara>
    Innerhalb der put.php3-Datei knnte folgendes stehen:
   </simpara>
   <para>
    <informalexample><programlisting>
&lt;? copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?&gt;
    </programlisting></informalexample>
   </para>
   <simpara>
    Dies kopiert die Datei an den vom Client angegebenen Ort.
    Mglicherweise sollen vor dem Kopieren der Datei noch
    berprfungen und/oder Benutzerauthentifizierung stattfinden. Wenn
    PHP eine PUT-Anfrage erhlt, wird die Datei in einem temporren
    Verzeichnis gespeichert, genau wie bei <link
    linkend="features.file-upload.post-method">POST-Methode</link>
    Nach Abarbeiten der Anfrage wird die temporre Datei gelscht.
    Also mu das PHP-Skript, das die PUT-Anfrage bearbeitet, die Datei
    irgendwohin kopieren. Der Name der temporren Datei findet sich in
    der Variablen $PHP_PUT_FILENAME; der Name der zu speichernden
    Datei steht in $REQUEST_URI (kann bei Nicht-Apache Webservern
    variieren). Dieser Zieldateiname wird vom Client festgelegt. Man
    kann den Client auch umgehen; beispielsweise knnten alle
    hochgeladenen Dateien in ein spezielles Upload-Directory kopiert
    werden.
   </simpara>
  </sect1>

 </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:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->