php file_upload mit endung jpg und festen namen

ciberjoerg

Erfahrenes Mitglied
Hallo ich hab ein Problem mit meinem fileupload in php.

PHP:
<?php
    /* Kontrolldaten */
    echo "Zur Kontrolle:<p>";
    echo "Original-Dateiname: $upfile_name<br>";
    echo "Dateigröße: $upfile_size Byte<br>";
    echo "Dateityp: $upfile_type<br>";

    /* Dateinamen-Erweiterung extrahieren */
    $dname = explode(".",$upfile_name);
    $dnamesize = count($dname);
    $upfile_ext = $dname[$dnamesize-1];
    echo "Dateinamen-Erweiterung: " . $upfile_ext . "<p>";

    /* Temporärer Dateiname auf dem Server */
    echo "Temporärer Dateiname: $upfile<p>";

    /* Temporäre Datei dauerhaft an gewünschten Ort kopieren, */
    /* falls vorhanden und richtige Erweiterung */
    if($upfile_size>0 && $upfile_ext=="jpg")
    {
        copy($upfile,"$u->nic/$u->nic.jpg");
        echo "Datei wurde kopiert in uc19.jpg<p>";
        echo "<img src='uc19.jpg>";
    }
    else
    {
        echo "Kopier-Fehler: Datei nicht vorhanden";
        echo " oder keine jpg-Datei";
    }
?>

also ich bekomme immer ne Fehlermeldung. Die Datei sei keine jpg Datei obwohl es eine ist.
zudem soll die Datei in einem generierten Ordner eingefügt und das bild Soll den Generierten namen bekommen.beide haben den gleichen namen.
woran kann der Fehler liegen?
 
hmmm, das $upfile_size > 0 in der if-Abfrage stört mich etwas, erscheint mir unnötig... generell aber schlage ich dir dies vor, um auf JPG oder anderes zu checken:

PHP:
// Temporärer Filename, erstellt von PHP
$ftmp = $_FILES['inputname'][tmp_name];
// kann z.B. auch sein: $newfilename = "neuer_name".$checkimg
$newfilename = $_FILES['inputname'][name]; 
// Pfad, in dem das Bild gespeichert werden soll, MIT Dateinamen + Endung
$fname = 'pfad_zum/ordner/'.$newfilename;
// Originalbildname
$oname = $_FILES['inputname'][name];
// Originalbildname auf letzte 3 zeichen kürzen
$checkimg = substr($oname, -3);
//Array mit erlaubten Formaten
$checkimg_array = array('jpg', 'JPG', 'png', 'PNG', 'gif', 'GIF');

// checken, ob format korrekt ist:		
if(in_array($checkimg, $checkimg_array)):
      // Upload aus dem TEMP-Ordner verschieben in Webserverordner und Aktion ausführen:
      if(move_uploaded_file($ftmp, $fname)):
            // wenn move_uploaded_file() TRUE zurück gibt:
            echo 'Upload hat funktioniert.';
      else:
            // wenn move_uploaded_file() FALSE zurück gibt:
            echo 'Fehler beim verschieben der Datei!';
      endif;
else:
      // wenn Dateiformat nicht korrekt ist:
      echo 'Dateiformat ist falsch!';
endif;

So, das Formular muss ich jetzt aber nicht erklären denk ich mal...
Das Script oben sollte eigentlich funktionieren, hab es jetzt nicht weiter getestet, weil ich es in ähnlicher Form selbst nutze, hierfür aber etwas abgewandelt habe.

Okay, dann war die Frage nach dem generierten Ordner und generierten Namen.
Wie man einen Ordner per PHP erstellen kann:

PHP:
// CHMOD: 4 stellig, erste ziffer: 0, voller schreibzugriff (nötig für Upload) schaut so aus:
// 0777. Ansonsten 0755 setzen.
mkdir ("./pfad/zum/ordner", CHMOD);

Wie du einen dynamischen Namen generieren kannst:

PHP:
// gefunden auf selfphp.de, ergäbe z.B.:
// 94b3031e72ec907d2b1432d893d5f25f
// mit substr($new_name, zeichenanzahl); kannst du auch noch die Länge des Namens bestimmen.
$new_name md5(uniqid(rand(), TRUE));

Ich denke jetzt sollte es dir ein leichtes sein, dynamisch Ordner zu erstellen, bilder dynamisch zu benennen und so weiter.

Achso, eine kleine Anmerkung noch: Mein Uploadscript oben checkt nicht auf den Mime-Type des Uploads. Das wäre unter Umständen noch eine Ergänzung deinerseits Wert. Ich werd das bei mir selbst auch noch einbauen.
 
Zuletzt bearbeitet:
joh, geht natürlich auch, hab ich aber erst nach dem Script herausgefunden... Hab keine lust das nochmal umzucoden :D faulheit siegt ab und an ;) Aber recht hast du auf jeden Fall. Dort hast du ja auch gleich die Sicherheit nur bilder zu haben.

Allerdings kann man mein Script auch für andere Dateiendungen anwenden, und dann funktioniert die idee mit getimagesize() nicht ;)
 
wie ich ordener mit mkdir erstelle weis ich das war nicht die frage.
die frage war wie ich die bilder in dem ordner hinein laden kann.
 
also ich hab jetzt mal das fileupload script getestet, aber ich bekomme nur ne fehlermeldung falscher dateityp. obwohl es die richtige endung hat.
 
Zurück