PHP/MySQL - Praxistutorial 4 - Grundsätzliches
1. Die Abschnitte
- Überblick
- Das Formular
- Zugriffsrechte
- Grundsätzliches
- Der Upload
- Rechte setzen
- Dateien auslesen
- Dateien anlegen
- Dateien löschen
2. Vorbereitung
In der index.php
benötigen wir nur zwei kleine Einträge. Packt den folgenden Code direkt an der Anfang der Datei
<?php
require_once('inc/upload.inc.php');
if ($_FILES)
{
$msg = uploadFile();
}
?>
und den hier unter das body
-Tag.
<?php
if (!empty($msg))
{
echo '<p>'.$msg.'</p>';
}
?>
Erläuterung
Eigentlich gibt es hier nicht viel zu sagen. Wir rufen eine Funktion namens uploadFile
auf. Die wiederum gibt eine
Meldung zurück (dazu später mehr) und wirft sie aus. Interessant ist hier nur die Bedingung if ($_FILES)
. Denn die greift
nur, wenn man ein Formular absendet, bei dem man Daten hochladen kann.
3. Der Zugriff
Im Gegensatz zu normalen Formularwerten steuert man Upload-Daten nicht über $_POST
sondern über $_FILES
an.
Mit diesem ebenfalls globalem Array hat man Zugriff auf alle benötigten Informationen
zum Dateiupload. Der erste assoziative Index ist immer der Name des Formularfeldes, in unserem Beispiel also datei
. In der
zweiten Ebene des Arrays befinden sich alle benötigten Informationen.
$_FILES['datei']['name']
Name der hochzuladenden Datei$_FILES['datei']['tmp_name']
Name der temporären Datei nach dem Upload$_FILES['datei']['size']
Größe der Datei in Bytes$_FILES['datei']['type']
MIME-Typ der Datei-
$_FILES['datei']['error']
Ab PHP 4.2, gibt Fehlercodes zurück- 0 =
UPLOAD_ERR_OK
-> Alles in Butter, Upload war erfolgreich - 1 =
UPLOAD_ERR_INI_SIZE
-> Datei ist größer, als beiupload_max_filesize
(php.ini)
angegeben - 2 =
UPLOAD_ERR_FORM_SIZE
-> Datei ist größer, als beim FeldMAX_FILE_SIZE
angegeben - 3 =
UPLOAD_ERR_PARTIAL
-> Datei wurde unvollständig hochgeladen - 4 =
UPLOAD_ERR_NO_FILE
-> Es wurde nichts hochgeladen
- 0 =
4. Safe Mode
Das ist eine Einstellung, die immer wieder für Verzweiflung bei Anfängern führt. Dabei ist diese Einstellung meiner Meinung völlig idiotisch! Darum wird sie seit PHP 5.3 auch zu Recht als "deprecated" (missbilligt) eingestuft und verschwindet mit PHP 6 endgültig.
Das Problem
Wir laden unser Upload-Script per FTP auf den Webserver hoch. Somit gehört diese Datei zum Eigentümer FTP-Benutzer. Wenn wir das Script
aber im Browser aufrufen und zum Beispiel einen Ordner erstellen, so gehört der zum Eigentümer des Webservers, also zum Beispiel
"wwwrun". In dem Fall kann also das Script die hochgeladene Datei nicht in den neuen Ordner verschieben, weil
safe_mode
das nicht gestattet. Auf dieses Problem gehe ich später ein, ich wollte euch nur schon mal vorwarnen.
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt