Datei-Upload mit Größen-Beschr.?

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

  • Datei-Upload mit Größen-Beschr.?

    Hallo zusammen,

    aus den vielen hervorragenden Code-Schnipseln und Beiträgen hier im Forum habe ich ein Upload-Skript gebastelt, welches auch wunderbar funktioniert.
    Was leider noch fehlt: Ich möchte die Maße des Banners überprüfen und bei einer Länge > 468 Pixel und/oder einer Höhe > 60 Pixel eine entsprechende Fehlermeldung ausgeben und den Upload zurückweisen.

    Hat jemand eine Idee, wie man das umsetzen könnte? Die Funktion getimagesize() habe ich ausprobiert, aber leider wohl nicht so ganz verstanden.

    PHP-Code:
    <form
      action="<?php echo $_SERVER['PHP_SELF']; ?>"
      method="post"
      enctype="multipart/form-data">
    <input type="file" name="probe" />
    <input type="submit" value="Los!" />
    </form>
    <hr />

    <?php


         $MAX_FILE_SIZE 
    15360;

      if (isset(
    $_FILES['probe'])
      and ! 
    $_FILES['probe']['error']
      and ((
    $_FILES['probe']['type'] == "image/pjpeg") or ($_FILES['probe']['type'] == "image/gif"))
      and (
    $_FILES['probe']['size'] <= $MAX_FILE_SIZE)) {



        
    move_uploaded_file($_FILES['probe']['tmp_name'], "./" $_FILES['probe']['name']);
        
    printf("Die Datei %s steht jetzt  " .
              
    "zur Verfügung.<br />\n",
          
    $_FILES['probe']['name']);
        
    printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
          
    $_FILES['probe']['size'], $_FILES['probe']['type']);

          }

      else {

      echo 
    "Es ist ein Fehler aufgetreten: Das Banner darf nur vom Dateityp .gif oder .jpg sein, max.
      die Maße 468*60 haben und höchstens 15 kb groß sein!"
    ;
      }
    Danke im voraus und viele Grüße
    langerxxx

  • #2
    genau das hab ich zufällig mal als fertige funktion getippselt, hab sie nie brauchen können, schön, dass sie vielleicht doch noch zum einsatz kommt

    PHP-Code:
    <?
        function check_imagesize($image,$mw=468,$mh=60,$ms=10000)
            {
            $fi = getimagesize($image);

            if(($fi[0] >= $mw) || ($fi[1] >= $mh) || (filesize($image) >= $ms))
                {
                if($fi[0] >= $mw)echo "<p>das Bild darf maximal " . $mw . " Pixel breit sein!</p>\r\n\r\n";
                if($fi[1] >= $mh)echo "<p>das Bild darf maximal " . $mh . " Pixel hoch sein!</p>\r\n\r\n";
                return false;
                }
            else
                {
                return true;
                }
            }
    ?>
    Zuletzt geändert von Tenebrael; 05.01.2004, 02:13.

    Kommentar


    • #3
      Eine kleine Erleuterung wäre vielleicht nciht schlecht
      Zuletzt geändert von Tenebrael; 05.01.2004, 02:12.

      Kommentar


      • #4
        SCHEIßE!!! DASS MAN SEINE BEITRÄGE HIER AUCH NICHT BEARBEITEN KANN!!!

        bin auf 'abschicken gekommen ;-)

        also hier nochmal in deinem script:
        PHP-Code:
        <form
          action="<?php echo $_SERVER['PHP_SELF']; ?>"
          method="post"
          enctype="multipart/form-data">
        <input type="file" name="probe" />
        <input type="submit" value="Los!" />
        </form>
        <hr />

        <?php


             $MAX_FILE_SIZE 
        15360;

            function 
        check_imagesize($image,$mw=468,$mh=60)
                {
                
        $fi getimagesize($image);

                if((
        $fi[0] >= $mw) || ($fi[1] >= $mh) || (filesize($image) >= $ms))
                    {
                    if(
        $fi[0] >= $mw)echo "<p>das Bild darf maximal " $mw " Pixel breit sein!</p>\r\n\r\n";
                    if(
        $fi[1] >= $mh)echo "<p>das Bild darf maximal " $mh " Pixel hoch sein!</p>\r\n\r\n";
                    return 
        false;
                    }
                else
                    {
                    return 
        true;
                    }
                }

          if (isset(
        $_FILES['probe'])
          and ! 
        $_FILES['probe']['error']
          and ((
        $_FILES['probe']['type'] == "image/pjpeg") or ($_FILES['probe']['type'] == "image/gif"))
          and (
        $_FILES['probe']['size'] <= $MAX_FILE_SIZE)) 
          and(
        check_imagesize($_FILES['probe'])){



            
        move_uploaded_file($_FILES['probe']['tmp_name'], "./" $_FILES['probe']['name']);
            
        printf("Die Datei %s steht jetzt  " .
                  
        "zur Verfügung.<br />\n",
              
        $_FILES['probe']['name']);
            
        printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
              
        $_FILES['probe']['size'], $_FILES['probe']['type']);

              }

          else {

          echo 
        "Es ist ein Fehler aufgetreten: Das Banner darf nur vom Dateityp .gif oder .jpg sein, max.
          die Maße 468*60 haben und höchstens 15 kb groß sein!"
        ;
          }
        ACHTUNG ich hab das script eben nochmal verändert, weil es ursprünglich die grafik auch gleich speichern sollte, aber das tut dein script ja schon. also wenn du es so einsetzt wie ich das in DIESEM post geschrieben hab, dann musst du auch das script aus DIESEM post nehmen, ok?

        Kommentar


        • #5
          OffTopic:

          Es ist ohne probleme möglich seine gesendeten Beiträge zu bearbeiten...

          mfg
          Günni


          Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
          Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
          Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
          City-Tiger - Online durch die Straßen tigern...

          Kommentar


          • #6
            Hallo Tenebrael,

            erstmal Grüße nach DA und danke für den Code!

            Einen kleinen Syntaxfehler (falsch gesetzte Klammer) habe ich gerade noch gefunden, allerdings treten noch zwei andere Fehler auf. Ich poste gerade mal die Fehler-Meldung und die dazugehörigen Code-Zeilen:

            Warning: getimagesize: Unable to open 'Array' for reading. in /home/domaindbe/www.domain.de/fileupload/upload.php on line 19

            PHP-Code:
            $fi getimagesize($image); 
            Warning: stat failed for Array (errno=2 - No such file or directory) in /home/domaindbe/www.domain.de/fileupload/upload.php on line 21

            PHP-Code:
            if(($fi[0] >= $mw) || ($fi[1] >= $mh) || (filesize($image) >= $ms)) 
            Kann mir da jemand weiterhelfen??

            cu
            langerxxx

            Kommentar


            • #7
              $image ist ein Array!!!

              lies mal das kapitel file_upload im Manual durch!

              Kommentar


              • #8
                jo, das liegt daran, dass ich immer die faule schreibweise verwendet hab, also nicht $_FILES["probe"] sondern einfach $probe. das geht halt nur wenn register_globals an ist. war ein kleiner fehler von mir...sorry...du musst ja das script mit der datei anwenden, die du später verschiebst, wenn ich aus diesem komische $_FILE array mit dem ich mich nie auseinandergesetzt hab richtig schlau werde, dann müsste das
                $_FILES['probe']['tmp_name'] sein. prbier mal an der aufrufenden stelle das zu schreiben:

                PHP-Code:
                check_imagesize($_FILES['probe']['tmp_name']) 
                OffTopic:

                @günni: oops hab ich jetzt auch gemerkt, ich dachte dieser link wäre wie beim phpbb-forum am oberen rand des beitrags...hab die ganze zeit versucht den beitrag darüber zu bearbeiten

                Kommentar


                • #9
                  OffTopic:
                  das hat mit Faulheit schon nichts mehr zu tun. das ist einfach UNSAUBER!

                  Kommentar


                  • #10
                    Mmh, leider hilft das nicht weiter... Könnte mir nochmal jemand auf die Sprünge helfen, wo jetzt genau der Fehler liegt. Irgendwie scheint er ja nicht an die Datei zu kommen, die auf die richtige Größe überprüfen soll.

                    Wäre super nett, mit Arrays hab' ich immer noch meine Schwierigkeiten.

                    Danke schonmal!

                    cu
                    langerxxx

                    Kommentar


                    • #11
                      welcher ist dein aktueller code?

                      Stell dir die Arrays einfach so vor, als wären Sie normale Variablen.

                      Also $hallo['welt'] also ganz normal als $hallowelt. Dann ist das verständnis etwas einfacher.

                      Kommentar


                      • #12
                        Stimmt, so wird es etwas klarer...

                        Aber warum hat er denn Probleme an das Bild zu kommen? Irgendwie hänge ich hier gerade an einem logischen Problem.

                        Hier nochmal der aktuelle Code

                        PHP-Code:
                        <?php


                             $MAX_FILE_SIZE 
                        15360;

                            function 
                        check_imagesize($image,$mw=468,$mh=60)
                                {
                                
                        $fi getimagesize($image);

                                if((
                        $fi[0] >= $mw) || ($fi[1] >= $mh) || (filesize($image) >= $ms))
                                    {
                                    if(
                        $fi[0] >= $mw)echo "<p>das Bild darf maximal " $mw " Pixel breit sein!</p>\r\n\r\n";
                                    if(
                        $fi[1] >= $mh)echo "<p>das Bild darf maximal " $mh " Pixel hoch sein!</p>\r\n\r\n";
                                    return 
                        false;
                                    }
                                else
                                    {
                                    return 
                        true;
                                    }
                                }

                          if (isset(
                        $_FILES['probe'])
                          and ! 
                        $_FILES['probe']['error']
                          and ((
                        $_FILES['probe']['type'] == "image/pjpeg") or ($_FILES['probe']['type'] == "image/gif"))
                          and (
                        $_FILES['probe']['size'] <= $MAX_FILE_SIZE)
                          and 
                        check_imagesize($_FILES['probe']['name'])){



                            
                        move_uploaded_file($_FILES['probe']['tmp_name'], "./" $_FILES['probe']['name']);
                            
                        printf("Die Datei %s steht jetzt  " .
                                  
                        "zur Verfügung.<br />\n",
                              
                        $_FILES['probe']['name']);
                            
                        printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",
                              
                        $_FILES['probe']['size'], $_FILES['probe']['type']);

                              }

                          else {

                          echo 
                        "Es ist ein Fehler aufgetreten: Das Banner darf nur vom Dateityp .gif oder .jpg sein, max.
                          die Maße 468*60 haben und höchstens 15 kb groß sein!"
                        ;
                          }

                         
                        ?>
                        Danke!

                        Kommentar


                        • #13
                          and check_imagesize($_FILES['probe']['name'])){
                          der name existiert nicht! Es existiert nur der temname.

                          Kommentar


                          • #14
                            Ahh, jetzt ist der Groschen gefallen. name existiert ja erst, wenn die temporäre Datei verschoben worden ist. Oh man, manchmal sieht man echt den Wald vor lauter Bäumen nicht! Dabei hatte ja Tenebrael die richtige Lösung schon geschrieben.

                            Auf jeden Fall super vielen Dank euch allen, vor allem an Tenebrael und TobiaZ! Bin immer wieder gerne hier im Forum!

                            cu
                            langerxxx

                            Kommentar

                            Lädt...
                            X