PHP Dateiupload - PHP Upload Script
Autor
Flitze
Klicks 195565
Keywords:
Dateiupload in PHP, Dateien über ein Formular hochladen, Dateien ohne FTP-Programm hochladen, Uploadprüfung, PHP Upload Script, PHP Upload Script, vollständiges Skript
Klicks 195565
Rating für PHP Dateiupload
8.4 von 10
Bewertungen50
Stand
12.06.2013
8.4 von 10
Bewertungen50
Keywords:
Dateiupload in PHP, Dateien über ein Formular hochladen, Dateien ohne FTP-Programm hochladen, Uploadprüfung, PHP Upload Script, PHP Upload Script, vollständiges Skript
Breadcrumb:
Tutorials » PHP Dateiupload » PHP Dateiupload - PHP Upload Script
Step 8 – Das komplette PHP Upload Script
[ADSENSE_LINE]Kombiniert man Formular, Fehlerprüfung, Namensgebung und Speichern der Datei auf dem Webserver, so hat man ein voll funktionsfähiges Upload-Skript für Benutzerdateien.
Anmerkung
Wenn ich meinem Webanalyse-System glauben schenken darf, dann kommt der Großteil der Leser dieser Seite direkt aus der Google-Suche mit Suchanfragen wie zum Beispiel:
- php datei upload script
- php file upload script
- upload php script
- etc.
Deshalb an dieser Stelle der dringende Hinweis, dass es sich bei dieser Seite lediglich um einen Teil eines kompletten Tutorials zum Datei-Upload mittels PHP handelt. Sollten also einige der im Code beschriebenen Funktionen nicht an Hand der Kommentare klar werden, lohnt sich der Besuch der vorigen Unterseiten / Kapitel
Im folgenden PHP Upload Script Beispiel wird ein Formular definiert, dass ein Upload-Feld für Bilder zur Verfügung stellt. Diese Bilder werden lokal vom Rechner des Users ausgewählt. Beim Absenden des HTML Formulares wird das Bild an den Server übertragen und kann dort via PHP verarbeitet werden. Dazu werden zunächst einige Prüfungen des Files vorgenommen (Dateiendung, Größe, etc) und - sofern diese positiv ausfallen - die Datei wird persistent auf dem Server gespeichert.
PHP:
<?php
error_reporting(E_ALL);
// Funktionen definieren
// -----------------------------------------------
function checkUpload($myFILE, $file_extensions, $mime_types, $maxsize)
{
$errors = array();
// Uploadfehler prüfen
switch ($myFILE['error']){
case 1: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".ini_get('upload_max_filesize')."</b> ist.";
break;
case 2: $errors[] = "Bitte wählen Sie eine Datei aus, die <b>kleiner als ".$maxsize/(1024*1024)." MB</b> ist.";
break;
case 3: $errors[] = "Die Datei wurde nur teilweise hochgeladen.";
break;
case 4: $errors[] = "Es wurde keine Datei ausgewählt.";
return $errors;
break;
default : break;
}
// MIME-Type prüfen
if(count($mime_types)!=0 AND !in_array(strtolower($myFILE['type']), $mime_types)){
$fehler = "Falscher MIME-Type (".$myFILE['type'].").<br />".
"Erlaubte Typen sind:<br />\n";
foreach($mime_types as $type)
$fehler .= " - ".$type."\n<br />";
$errors[] = $fehler;
}
// Dateiendung prüfen
if($myFILE['name']=='' OR (count($file_extensions)!=0 AND !in_array(strtolower(getExtension($myFILE['name'])), $file_extensions))){
$fehler = "Falsche Dateiendung (".getExtension($myFILE['name']).").<br />".
"Erlaubte Endungen sind:<br />\n";
foreach($file_extensions as $extension)
$fehler .= " - ".$extension."\n<br />";
$errors[] = $fehler;
}
// Dateigröße prüfen
if($myFILE['size'] > $maxsize){
$errors[] = "Datei zu groß (".sprintf('%.2f',$myFILE['size']/(1024*1024))." MB).<br />".
"Erlaubte Größe: ".$maxsize/(1024*1024)." MB\n";
}
return $errors;
}
// gibt die Dateiendung einer Datei zurück
function getExtension ($filename)
{
if(strrpos($filename, '.'))
return substr($filename, strrpos($filename, '.')+1);
return false;
}
// erzeugt einen Zufallswert
function getRandomValue()
{
return substr(md5(rand(1, 9999)),0,8).substr(time(),-6);
}
// erzeugt einen neuen Dateinamen aus Zufallswert und
// Dateiendung
function renameFile ($filename)
{
return getRandomValue().".".getExtension($filename);
}
// Werte zur Dateiprüfung initialisieren
// -----------------------------------------------
$maxsize = 2*1024*1024;
$file_extensions = array('jpg', 'jpeg', 'jpe', 'gif', 'png');
$mime_types = array('image/pjpeg', 'image/jpeg', 'image/gif', 'image/png', 'image/x-png');
// Upload-Ordner definieren
// -----------------------------------------------
$ordner = "benutzer_dateien/";
// Beginn des Skriptes
// -----------------------------------------------
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \n".
"\"http://www.w3.org/TR/html4/strict.dtd\">\n";
echo "<html>\n";
echo "<head>\n";
echo " <title>Datei-Upload</title>\n";
echo "</head>\n";
echo "<body>\n";
// Falls der Benutzer auf "Upload" gedrückt hat,
// wird die Datei überprüft
if(isset($_POST['submit']) AND $_POST['submit']=='Upload'){
// Fehlerarray erzeugen
$errors = array();
$myFILE = $_FILES['Datei'];
$errors = checkUpload($myFILE, $file_extensions, $mime_types, $maxsize);
if(count($errors)){
echo "<p>\n".
"Die Datei konnte nicht gespeichert werden.<br />\n";
foreach($errors as $error)
echo $error."<br />\n";
echo "<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
"</p>\n";
}
else {
do {
$neuer_name = renameFile($myFILE['name']);
} while(file_exists($ordner.$neuer_name));
if(@move_uploaded_file($myFILE['tmp_name'], $ordner.$neuer_name)){
echo "<p>\n".
"Die Datei wurde erfolgreich gespeichert.<br />\n".
"<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
"</p>\n";
}
else{
echo "<p>\n".
"Die Datei konnte nicht gespeichert werden.<br />\n".
"Es ist ein Upload-Fehler aufgetreten.<br />\n".
"Bitte versuchen Sie es später erneut.<br />\n".
"<br />\n".
"Sollte der Upload noch immer nicht funktionieren, informieren Sie uns bitte per Email.<br />\n".
"<a href=\"".$_SERVER['PHP_SELF']."\">Zurück zum Upload-Formular</a>\n".
"</p>\n";
}
}
}
// Beim ersten Aufruf des Skriptes wird das
// Upload-Formular angezeigt
else{
echo "<h1>Laden Sie ein Bild hoch!</h1>\n";
echo "<h2>Erlaubte Dateiendungen sind:</h2>\n";
foreach($file_extensions as $extension)
echo " - ".$extension."\n<br />";
echo "<h2>Erlaubte Dateigröße:</h2>\n";
echo " - maximal ".($maxsize/(1024*1024))." MB\n<br />";
echo " <form ".
"action=\"".$_SERVER['PHP_SELF']."\" ".
"method=\"post\" ".
"enctype=\"multipart/form-data\">\n";
echo " <label for=\"Datei\">Datei auswählen</label>\n";
echo " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".$maxsize."\" />\n";
echo " <input type=\"file\" name=\"Datei\" id=\"Datei\" />\n";
echo " <input type=\"submit\" name=\"submit\" value=\"Upload\" />\n";
echo " </form>\n";
}
echo "</body>\n";
echo "</html>\n";
?>
Anmerkung:
Ich habe als Zielordner für den Upload den Ordner "benutzer_dateien" angegeben. Bitte achten Sie darauf, dass dieser Ordner auch existiert und dass Sie bei der Variablenzuweisung einen Slash (/) ans Ende des Ordnernamens setzen.
PHP:
<?php
// Upload-Ordner definieren
// -----------------------------------------------
$ordner = "benutzer_dateien/";
?>
Das ist nötig, da sonst der Funktion move_uploaded_file() eine unkorrekte Pfadangabe übergeben würde, da Dateiname und Order durch einen Slash getrennt werden müssen.
PHP:
<?php
if(@move_uploaded_file($myFILE['tmp_name'], $ordner.$neuer_name))
?>
Zurück zur vorigen Seite:
PHP Dateiupload - Einstellungen in der php.ini Weiter zur nächsten Seite:
PHP Dateiupload - Mehrere Uploadfelder definieren