PHP Tutorials, PHP lernen, PHP Forum, PHP Community and more ... MyWebsolution.de!

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Pascal Landau

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt1
Heute177
Gestern214
Gesamt2308280

PHP Dateiupload - Funktion zur Fehlerprüfung

Autor Flitze
Klicks 193654
Rating für PHP Dateiupload
  8.4 von 10
Bewertungen50
Stand 12.06.2013
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

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Tutorials » PHP Dateiupload » PHP Dateiupload - Funktion zur Fehlerprüfung
Seite : 1 2 3 4 5 6 7 8 9 10 11 12 13 Bewerten
Article Wizard - deutscher Article Spinner

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)!=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)!=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($filenamestrrpos($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

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8

Workshops (3)

8.8
8.7
7.6

Tipps (12)

7.2
6.7
6.5

Artikel (32)

8.4
8
7.2

RSS Feeds

Full Feed Tutorials Workshops Tipps Artikel

Twitter

Follow me on Twitter

Partner & Links


Valid HTML 4.01 Transitional
Valid CSS
nach oben

Diese Seiten unterstützen MyWebsolution:
 
© MyWebsolution.de
2006-2024