Fehler bei File-Upload-Script

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

  • Fehler bei File-Upload-Script

    Hallo Leute,

    ich hab ein kleines Script geschrieben, wo Files hochgeladen werden können.

    Zurerst wird überprüft ob man auch über das Formular auf die Seite kommt, danach ob der Upload geklappt hat, dann ob es sich auch um ausgewwählte Dateiformate handelt und zum Schluss, ob die Größe von einem Megabyte nicht überschritten wurde.

    Klappt an sich alles, nur die if-Abfrage mit der Dateigröße irgendwie nicht. Lustigerweise erscheint egal bei welcher Dateigröße der Text "Video hochgeladen!" aber hochgeladen wird es nur, wenn die Dateigröße tatsächlich unter einem Megabyte ist...versteh ich ned, is doch in derselben IF-Abfrage drin, wie soll das gehen?!

    Maximales Uploadlimit vom Server sind 200MB.

    Hat jemand ne AHnung`?

    Danke & Gruß

    Code:
     
    <?php
    $allowedExtensions = array("avi","mpg","mpeg","mov","mp4","3gp","flv","mkv");
     
    if(isset($_POST['submit']) && $_POST['submit']=="Hochladen")
    {
     if(!isset($_FILES['thefile']['tmp_name'])){
             die("Es gab einen Fehler bei der Übertragung, bitte versuche es erneut!");
      }else {
       if (!in_array(end(explode(".",  strtolower($_FILES['thefile']['name']))), $allowedExtensions)){
              die("Es können nur folgende Video-Formate hochgeladen werden: AVI, MPEG, MOV, MP4, 3GP, FLV, MKV");
     
      }else {
        if($_FILES['thefile']['size'] > 1000000) {
        die("Dein Video darf leider nicht größer als 1 Megabyte sein!");
     
       }else {
     
     
     $timestamp = time();
     move_uploaded_file($_FILES['thefile']['tmp_name'], $timestamp."_".$_FILES['thefile']['name']); 
     echo "Video hochgeladen!";
        }
       }
      }  
    }
    else
    {
     die("Fehlerhafter Seitenaufruf");
    }
     
    ?>

  • #2
    Der Zweig, in dem du die Größe abfragst, steckt im else-Zweig der Abfrage, ob 'tmp_name' gesetzt ist. Wenn das der Fall ist - dann kommt es überhaupt nicht mehr zur Abfrage der Größe ...

    a) Gewöhne dir einen vernünftigen und vor allem konsequenten Einrückungs- und Klammerungs-Stil an - mal schreibst du die öffnende geschweifte Klammer eines Blocks auf die selbe Zeile hinter das if/else, mal auf die nächste ... kein Wunder, dass du da den Durchblick verlierst.

    b) Lies bitte im Manual noch mal aufmerksam bzgl. Kontrollstrukturen nach. Statt else { if { ... wäre elseif die bessere Wahl, wenn du eine Reihe „gleichberechtigter“ Fehlerquellen nacheinander abfragen willst.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Danke für deine Antwort!

      Hab mir den Code teils zusammenkopiert, daher siehts auch so chaotisch aus. Hast aber schon recht, da blickt keiner mehr durch.

      Aber das mit der ELSE-Schleife stimmt ja schon - die IF wird ausgeführt, wenn 'tmp_name' NICHT exisitert, und die ELSE dementsprechend, wenn 'tmp_name' existiert. Daher müsste das schon stimmen. Benutz ich die falsche Dateiendung, so erscheint ja auch meine Fehlermeldung.

      Kann es vielleicht daran liegen, dass das $_FILES['thefile']['size'] erst NACH dem ausführen von move_uploaded_file existiert?

      Grüße

      Kommentar


      • #4
        Kann es vielleicht daran liegen, dass das $_FILES['thefile']['size'] erst NACH dem ausführen von move_uploaded_file existiert?
        Ganz sicher nicht!
        Wir werden alle sterben

        Kommentar


        • #5
          Zitat von Alex87 Beitrag anzeigen
          Aber das mit der ELSE-Schleife stimmt ja schon - die IF wird ausgeführt, wenn 'tmp_name' NICHT exisitert, und die ELSE dementsprechend, wenn 'tmp_name' existiert. Daher müsste das schon stimmen.
          Ja, stimmt ... na gut, da bin ich wohl auf das kleine „Chaos“ hereingefallen.

          Aber lass dir doch einfach mal am Scriptanfang den Inhalt von $_FILES mit var_dump zur Kontrolle ausgeben - dann siehst du die realen Werte der einzelnen Eigenschaften, und kannst die mit den Vergleichswerten in deinem Script abgleichen.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Ich vermute das entweder $_FILES['thefile']['size'] kein Wert zugewiesen wurde oder das Video einen kleineren Wert hat als 1000000 Bytes.

            Ich würde an deiner Stelle keinen Abbruch mit der PHP Funktion die() machen. Die PHP Funktion die() sollte man als letzte Möglichkeit verwenden. Alles andere ist nach meiner Meinung sehr unsauber gelöst. Du solltest dir an dieser Stelle mein Tutorial "Ausnahmebehandlung in Php" -> http://www.php-space.info/php/space/...ung-in-php.php mal ansehen.
            Webspace , Php

            Kommentar


            • #7
              Wenn du ein Formular abschickst, ohne eine Datei hochzuladen, existiert $_FILES[...]['tmp_name'] trotzdem und $_FILES[...]['size'] ist 0. Vielleicht lädst du also gar nichts hoch, jedenfalls nicht im File-Input mit dem Namen thefile.

              Kommentar


              • #8
                Also Leute, ich habs hinbekommen. War folgendes Problem, von dem ihr nichts wissen konntet:

                Im Upload-Formular hatte ich max_file_size 1 MB angegeben. Ich dachte das funzt einfach ned, aber anscheinend doch Die Datei wird einfach nicht übertragen, das Script aber dennoch ausgeführt...

                Vielen Dank an Alle!

                Kommentar

                Lädt...
                X