[PHP5] PHP Upload nur jpg und gif erlauben !?!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [PHP5] PHP Upload nur jpg und gif erlauben !?!

    Hallo,

    ich hab hier ein kleines Privates Upload Skript das ich für paar Sachen auf meinem Webserver nutze, das auch soweit für meine Ansprüche gerecht ist - Nur sind mir in den letzten Tagen vermehrt Dateien aufgefallen die ich nicht hochgeladen habe - Besonders eine "cookie_overflow.php" ...

    Das bereitet mir jetzt allmählich Kopfschmerzen, das ich an das Sicherheitsrisiko nicht eher gedacht hab.

    Darum ist die Frage, wie ich mein Upoadscript so ergänze (hab vom php selber schreiben leider keine Ahnung) das man lediglich .jpg und .gif. Dateien damit hochladen kann?

    Hier das Script :

    PHP-Code:
    <?php 
     
    ## pfad von dieser datei aus wo das hochgeladen werden soll 
    $dir "../pics/vorlagenpics/bildupload"
    $url "[URL="http://www.DOMAIN.de"]http://www.DOMAIN.de[/URL]";
     
    if($_POST['uppen']){ 
    if(!empty(
    $_FILES['file']['name'])){ 
     
     
    // Tmp_name 
    $tempname $_FILES['file']['tmp_name']; 
    $tempname2 $_FILES['file2']['tmp_name']; 
    $tempname3 $_FILES['file3']['tmp_name']; 
     
    // Namen der dateien 
    $name str_replace(" ","_",$_FILES['file']['name']);
    $name2 str_replace(" ","_",$_FILES['file2']['name']);
    $name3 str_replace(" ","_",$_FILES['file3']['name']);
     
    // typen der dateien 
    $type $_FILES['file']['type']; 
    $type2 $_FILES['file2']['type']; 
    $type3 $_FILES['file3']['type']; 
     
    // groeße der dateien 
    $size $_FILES['file']['size']; 
    $size2 $_FILES['file2']['size']; 
    $size3 $_FILES['file3']['size']; 
     
    // Dateien kopieren 
    @copy("$tempname""$dir/$name"); 
    @
    copy("$tempname2""$dir/$name2"); 
    @
    copy("$tempname3""$dir/$name3"); 
     
    // Ueberpruefung 
    $f1 file_exists($dir."/".$name); 
    $f2 file_exists($dir."/".$name2); 
    $f3 file_exists($dir."/".$name3); 
     
    if(
    $f1) { 
    $output $url."/pics/vorlagenpics/bildupload/".$name
    $ausgabe htmlentities(stripslashes($output)); 
    }else echo 
    "Upload von Datei 1 fehlgeschlagen!<br>"
     
    if(
    $f2){ 
    $output2 $url."/pics/vorlagenpics/bildupload/".$name2;
    $ausgabe2 htmlentities(stripslashes($output2)); 
    }else echo 
    "Upload von Datei 2 fehlgeschlagen!<br>"
     
    if(
    $f3){ 
    $output3 $url."/pics/vorlagenpics/bildupload/".$name3;
    $ausgabe3 htmlentities(stripslashes($output3)); 
    }else echo 
    "Upload von Datei 3 fehlgeschlagen!<br>"
     
    }else echo 
    "Datei muss gewählt werden<br>"
     
     
     
    }
     
    #echo "<form enctype=\"multipart/form-data\" action=\"?do=up\" method=\"post\">"; 
    if(isset($output) || isset($output2) || isset($output3)){ 
            if(!empty(
    $name)) 
                    echo 
    "<input type=\"text\" size=\"80\" name=\"file\" value=\"$ausgabe\">&nbsp;<img src=\"pics/haken.gif\" border=\"0\" alt=\"\"><br>"
            if(!empty(
    $name2)) 
                    echo 
    "<input type=\"text\" size=\"80\" name=\"file2\" value=\"$ausgabe2\">&nbsp;<img src=\"pics/haken.gif\" border=\"0\" alt=\"\"><br>"
            if(!empty(
    $name3)) 
                    echo 
    "<input type=\"text\" size=\"80\" name=\"file3\" value=\"$ausgabe3\">&nbsp;<img src=\"pics/haken.gif\" border=\"0\" alt=\"\"><br>"
    }else{ 
            echo 
    "<input type=\"file\" size=\"80\" name=\"file\"><br>"
            echo 
    "<input type=\"file\" size=\"80\" name=\"file2\"><br>"
            echo 
    "<input type=\"file\" size=\"80\" name=\"file3\"><br>"

    echo 
    "<br><input type=\"submit\" name = \"uppen\" value=\"Hochladen\"> <span class=\"rot\"> &lt;&mdash; Bild auswählen dann auf hochladen klicken!</span>"
     
    ?>
    Wäre vielleicht bitte jemand so nett und könnte mir da auf die Sprünge helfen?

    Ich hab schon folgendes versucht :

    PHP-Code:
    // Tmp_name 
    $tempname $_FILES['file']['tmp_name']; 
    if(
    strtolower(substr($tempname, -4)) == ".gif" || strtolower(substr($tempname, -4)) == ".jpg")
    {
    echo 
    "Dateiendung erlaubt...";
    } else {
    echo 
    "Dateiendung nicht erlaubt...";
    }
    $tempname2 $_FILES['file2']['tmp_name']; 
    if(
    strtolower(substr($tempname2, -4)) == ".gif" || strtolower(substr($tempname2, -4)) == ".jpg")
    {
    echo 
    "Dateiendung erlaubt...";
    } else {
    echo 
    "Dateiendung nicht erlaubt...";
    }
    $tempname3 $_FILES['file3']['tmp_name']; 
    if(
    strtolower(substr($tempname3, -4)) == ".gif" || strtolower(substr($tempname3, -4)) == ".jpg")
    {
    echo 
    "Dateiendung erlaubt...";
    } else {
    echo 
    "Dateiendung nicht erlaubt...";

    Allerdings bringt er mir jetzt 3 mal "Dateiendung nicht erlaubt..." und ladet auch nix hoch !?!

    Hm ... Irgendwas schein ich verkehrt gemacht zu haben!

    Danke !

    Natheedo
    Zuletzt geändert von Natheedo; 15.06.2006, 18:50.

  • #2
    1)warum suchst du deine endung in $_FILES['file']['tmp_name']; ?
    wie wäre es mit dem echo oder print_r($_FILES['file'])?
    Slava
    bituniverse.com

    Kommentar


    • #3
      Re: [PHP5] PHP Upload nur jpg und gif erlauben !?!

      PHP-Code:
      $allowed_ext = array('gif''jpg''jpeg')
      foreach (
      $_FILES as $file) {
          
      $name str_replace(' ''_'$file['name']);
          
      $ext strtolower(substr($namestrrpos($name'.')+1));
          if (!
      in_array($ext$allowed_ext)) {
              echo 
      'Dateiendung '.$ext.' nicht erlaubt!<br />';
              echo 
      'Datei '.$file['name'].' wurde verworfen!<br />';
              continue;
          }
          if (!
      move_uploaded_file($file['tmp_name'], $dir.'/'.$name)) {
              echo 
      'Fehler beim Hochladen der Datei '.$file['name'].'!<br />';
              continue;
          }
          echo 
      'Upload der Datei '.$file['name'].' erfolgreich!<br />';

      Kommentar


      • #4
        Re: Re: [PHP5] PHP Upload nur jpg und gif erlauben !?!

        Original geschrieben von onemorenerd
        PHP-Code:
        $allowed_ext = array('gif''jpg''jpeg')
        foreach (
        $_FILES as $file) {
            
        $name str_replace(' ''_'$file['name']);
            
        $ext strtolower(substr($namestrrpos($name'.')+1));
            if (!
        in_array($ext$allowed_ext)) {
                echo 
        'Dateiendung '.$ext.' nicht erlaubt!<br />';
                echo 
        'Datei '.$file['name'].' wurde verworfen!<br />';
                continue;
            }
            if (!
        move_uploaded_file($file['tmp_name'], $dir.'/'.$name)) {
                echo 
        'Fehler beim Hochladen der Datei '.$file['name'].'!<br />';
                continue;
            }
            echo 
        'Upload der Datei '.$file['name'].' erfolgreich!<br />';

        Hm da bekomme ich lediglich einen :

        Parse error: parse error, unexpected T_FOREACH on line 176
        Hab ich jetzt was falsch gemacht? Hab dein Script 1:1 so übernommen !?!

        Natheedo

        Kommentar


        • #5
          Vor dem foreach fehlt ein Semikolon.
          Aber du wirst gleich in die nächste Fehlermeldung rasseln, denn wenn du mit dieser einfachen nicht klarkommst, kannst du unmöglich wissen, wie und wo du den Codeschnipsel richtig einbauen mußt.
          Aber bevor du jetzt fragst, empfehle ich dir erstmal einen tiefen Blick ins Handbuch (http://php.net/manual). Es enthält auch einen Abschnitt über Fileuploads.

          Kommentar


          • #6
            wo ist die 176-te Zeile?
            aber ich vermute schon, dass du $_FILES erst mit print_r ausgeben muss.
            dieser script wird nur dann funktionieren, wenn du mehrere dateien absendest(glaube ich)
            du muss der script auch für den fall vorbereiten, dass es keine oder eine datei angekommen ist
            Slava
            bituniverse.com

            Kommentar


            • #7
              Die 176te Zeile war die 2te Zeile von onemorenerd.

              Gut aber wenns so oder so net geht, weil wie du Slava richtig erkannt hast, auch mal nur eine oder eben gar keine absende - Naja muss ich es wohl dabei belassen wie es ist - Dachte das wäre ein kleineres Problem und hab gehofft das mir jemand den Codeschnipsel fertig präsentiert. Weil ich eben noch nicht wirklich PHP kann.

              Trotzdem danke !

              Natheedo

              Kommentar


              • #8
                und ein wenig experementieren?
                PHP-Code:
                function filecopy($file){
                $allowed_ext = array('gif''jpg''jpeg');
                $name str_replace(' ''_'$file['name']);
                    
                $ext strtolower(substr($namestrrpos($name'.')+1));
                    if (!
                in_array($ext$allowed_ext)) {
                        echo 
                'Dateiendung '.$ext.' nicht erlaubt!<br />';
                        echo 
                'Datei '.$file['name'].' wurde verworfen!<br />';
                        continue;
                    }
                    if (!
                move_uploaded_file($file['tmp_name'], $dir.'/'.$name)) {
                        echo 
                'Fehler beim Hochladen der Datei '.$file['name'].'!<br />';
                        continue;
                    }
                    echo 
                'Upload der Datei '.$file['name'].' erfolgreich!<br />';
                }
                $daten=array('file','file2','file3');
                foreach(
                $daten as $d){
                if(isset(
                $_FILES[$d]))filecopy($_FILES[$d]);

                Slava
                bituniverse.com

                Kommentar


                • #9
                  Danke aber auch das ging nicht :

                  Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/foto2.jpg) is not within the allowed path(s): (/var/www/html/web108/html/:/var/www/html/web108/phptmp/:/var/www/html/web108/files/:/var/www/html/web108/atd/) in /var/www/html/web108/html/vorlagen/allgemein.php on line 184
                  Fehler beim Hochladen der Datei foto2.jpg!

                  Fatal error: Cannot break/continue 1 level in /var/www/html/web108/html/vorlagen/allgemein.php on line 186
                  Wie gesagt ist aber auch net schlimm, ich werds einfach so lassen, bevor sich hier jemand erstmal intensiv damit beschäftigen muss, nur weil ichs nicht kann.

                  Natheedo

                  Kommentar

                  Lädt...
                  X