PHP kann Dateiuploads mit jedem RFC-1867 konformen Browser (dazu gehören der Netscape Navigator 3 oder höher, Microsoft Internet Explorer 3 mit einem Patch von Microsoft oder höher ohne Patch) durchführen. Es können sowohl Text- als auch Binärdaten hochgeladen werden. Mit PHP´s Authentifizierungs- und Dateifunktionen besteht volle Kontrolle darüber, wer Dateien hochladen darf und was mit den Dateien geschehen soll, wenn der Upload beendet ist.
Diesbezügliche Konfigurationshinweise: Siehe auch die Anweisungen file_uploads, upload_max_filesize, upload_tmp_dir und post_max_size in der php.ini
PHP unterstützt auch Dateiuploads nach der PUT-Methode, die beispielsweise vom Netscape Composer und den W3C Amaya Clients benutzt wird. Siehe dazu PUT-Unterstützung für nähere Informationen.
Eine Maske für den Dateiupload kann erstellt werden, indem man ein Formular entwirft, das ungefähr so aussieht:
Warnung |
Die maximale Dateigröße MAX_FILE_SIZE ist für den Browser nur ein Hinweis und es ist leicht, diese Grenze zu umgehen. Also verlassen Sie sich nicht darauf, dass der Browser Ihrem Wunsch auch nachkommt! Wie auch immer, die PHP-Einstellungen für die maximale Dateigröße können nicht getäuscht werden. |
Die für hochgeladene Dateien definierten Variablen sind je nach
PHP Version und Konfiguration verschieden. Die Autoglobale
$_FILES existiert
seit PHP 4.1.0 und das Array $HTTP_POST_FILES
seit PHP 4.0.0. Diese Arrays enthalten alle Informationen über
Ihre hochgeladenen Dateien. Die Verwendung von
$_FILES
wird bevorzugt. Ist die PHP Anweisung
register_globals auf
on, stehen auch entsprechende Variablennamen
zur Verfügung. Seit PHP 4.2.0
steht register_globals
standardmäßig auf off.
Im Folgenden sind die Inhalte von $_FILES aus unserem Beispielskript aufgelistet. Beachten Sie, dass dies auf der Annahme basiert, dass der Name des Dateiuploads wie in dem obigen Beispielskript userfile ist.
$_FILES['userfile']['name']
Der ursprüngliche Dateiname auf der Client Maschine.
$_FILES['userfile']['type']
Der Mime-Type der Datei, falls der Browser diese Information zur Verfügung gestellt hat. Ein Beispiel wäre "image/gif".
$_FILES['userfile']['size']
Die Größe der hochgeladenen Datei in Bytes.
$_FILES['userfile']['tmp_name']
Der temporäre Dateiname, unter dem die hochgeladene Datei auf dem Server gespeichert wurde.
$_FILES['userfile']['error']
Der Fehlercode im Zusammenhang mit dem hochladen der Datei. ['error'] wurde in PHP 4.2.0 eingeführt.
Anmerkung: In den Versionen vor PHP 4.1.0 war dies
$HTTP_POST_FILES
, und ist keine 'Autoglobale' Variable wie$_FILES
. PHP 3 unterstützt$HTTP_POST_FILES
nicht.
Ist register_globals
in der php.ini aktiviert, stehen zusätzliche Variablen zur Verfügung.
Zum Beispiel entspricht $userfile_name
$_FILES['userfile']['name']
,
$userfile_type
entspricht
$_FILES['userfile']['type']
, etc. Beachten Sie,
dass register_globals standardmäßig deaktiviert ist, jedoch wird
empfohlen, sich nicht darauf zu verlassen.
Standardmäßig werden Dateien in dem vorgegebenen temporären
Verzeichnis des Servers gespeichert, außer es wurde mittels
upload_tmp_dir in
der php.ini ein anderer Ort konfiguriert.
Das Standardverzeichnis des Servers kann durch das Setzen der
Umgebungsvariablen TMPDIR
in der Umgebung, in der
PHP ausgeführt wird, geändert werden. Das Setzen mittels der
Funktion putenv() innerhalb eines Skriptes
ist nicht möglich. Mittels dieser Umgebungsvariable kann auch
sichergestellt werden, dass auch andere Operationen an
hochgeladenen Dateien arbeiten können.
Beispiel 38-2. Dateiuploads prüfen Weitere Informationen finden Sie auch in den Beschreibungen für is_uploaded_file() und move_uploaded_file(). Das folgende Beispiel verarbeitet einen von einem HTML-Formular kommenden Dateiupload.
|
Das die hochgeladene Datei empfangende Skript sollte die notwendige
Logik zur Entscheidung enthalten, was mit der hochgeladenen Datei
geschehen soll. Sie können zum Beispiel
$_FILES['userfile']['size']
benutzen,
um zu kleine bzw. zu große Dateien wegzuwerfen. Sie können
$_FILES['userfile']['type']
nutzen, um Dateien
eines unerwünschten Typs wegzuwerfen. Seit PHP 4.2.0 können Sie Ihre
Logik auch mittels $_FILES['userfile']['error']
anhand der Fehlercodes
planen. Egal welche Logik Sie verwenden, Sie sollten die Datei in dem
temporären Verzeichnis entweder löschen, oder an einen anderen Ort
verschieben.
Wurde die Datei in dem temporären Verzeichnis nicht verschoben oder umbenannt, wird sie am Ende des Requests gelöscht.
Zurück | Zum Anfang | Weiter |
Mit XForms umgehen | Nach oben | Fehlermeldungen erklärt |