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
Heute234
Gestern247
Gesamt2325660

PHP Dateiupload - PHP Upload Script

Autor Flitze
Klicks 194236
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, PHP Upload Script, vollständiges Skript

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

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)!=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;
    }

    
// gibt die Dateiendung einer Datei zurück
    
function getExtension ($filename)
    {
        if(
strrpos($filename'.'))
             return 
substr($filenamestrrpos($filename'.')+1);
        return 
false;
    }

    
// erzeugt einen Zufallswert
    
function getRandomValue()
    {
        return 
substr(md5(rand(19999)),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

»» 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