PHP Dateiupload - Funktion zur Fehlerprüfung
Autor
Flitze
Klicks 195863
Keywords:
Dateiupload in PHP, Dateien über ein Formular hochladen, Dateien ohne FTP-Programm hochladen, Uploadprüfung, PHP Upload Script, Funktion Fehlerprüfung, Fehler mittels Funktion prüfen, checkUpload
Klicks 195863
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, Funktion Fehlerprüfung, Fehler mittels Funktion prüfen, checkUpload
Breadcrumb:
Tutorials » PHP Dateiupload » PHP Dateiupload - Funktion zur Fehlerprüfung
Step 4 – Funktion zur Fehlerprüfung
[ADSENSE_LINE]Da ein Upload einem User die Möglichkeit gibt, etwas auf den Server zu laden, sollte die entsprechende Datei zuvor genau geprüft werden. So wäre es z.B. in den meisten Fällen wohl unerwünscht, dass ein User eigene .php-Dateien hochladen kann. Aus diesem Grund wird nun eine Funktion entwickelt, die die Datei des Benutzers überprüft.
PHP:
<?php
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;
}
?>
Diese Funktion erwartet 4 Parameter:
$myFILE
Ein Array, das vom Aufbau dem $_FILES-Array gleicht
$maxsize
Eine Integer-Variable, die die maximal erlaubte Dateigröße in Byte enthält
Beispiel:
PHP:
<?php
$maxsize = 2*1024*1024;
?>
$file_extensions
Ein Array, das die erlaubten Dateiendungen als Strings enthält.
Beispiel:
PHP:
<?php
$file_extensions = array('jpg', 'jpeg', 'jpe', 'gif', 'png');
?>
$mime_types
Ein Array, das die erlaubten MIME-Typen als Strings enthält.
Beispiel:
PHP:
<?php
$mime_types = array('image/pjpeg', 'image/jpeg', 'image/gif', 'image/png', 'image/x-png');
?>
Als erstes wird $myFILE['error'] überprüft, in dem die Fehlernummer des Uploads gespeichert werden. Bei Fehlernummer 4 können wir uns eine weitere Prüfung sparen, da keine Datei ausgewählt wurde, deshalb gleich wird an dieser Stelle bereits ein Rückgabewert erzeugt.
Danach wird der MIME-Type validiert. Mit der Funktion in_array() vergleiche ich $myFILE['type'] mit den Werten des Arrays. Damit keine Differenzen aufgrund der groß/klein Schreibung auftreten, verwende ich zusätzlich noch die Funktion strtolower(), so dass der MIME-Type auf jeden Fall in Kleinbuchstaben überprüft wird. Bei nicht-Übereinstimmung wird eine entsprechende Fehlerausgabe erzeugt, die neben dem MIME-Type der Datei auch die erlaubten Typen mit ausgibt.
Als nächstes wird die Dateiendung geprüft, was im Prinzip genauso funktioniert wie die Prüfung der MIME-Typen. Die einzige Abweichung besteht darin, dass ich zuvor noch die Dateiendung aus dem Dateinamen extrahieren muss. Dazu verwende ich die Funktion getExtension, die die Zeichen nach dem letzten "." im Dateinamen zurückgibt und folgendermaßen definiert ist:
PHP:
<?php
function getExtension ($filename)
{
if(strrpos($filename, '.'))
return substr($filename, strrpos($filename, '.')+1);
return false;
}
?>
Zum Schluss wird noch die Dateigröße überprüft. Eigentlich müsste es sowieso einen Upload Fehler in $myFILE['error'] geben, wenn MAX_FILE_SIZE (das hidden-Feld im Formular) überschritten wird, aber darauf würde ich mich nur bedingt verlassen, denn diese Angabe kann vom User manipuliert werden.
Der Rückgabewert der Funktion ist ein Array ($errors), das alle aufgetretenen Fehler sammelt.
Zurück zur vorigen Seite:
PHP Dateiupload - Uploadfehler Weiter zur nächsten Seite:
PHP Dateiupload - Der gültige Name