Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Verkleinerung bei Bildupload

Einklappen

Neue Werbung 2019

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

  • Problem mit Verkleinerung bei Bildupload

    Hallo,

    ich verwende das Script dropzone.js (http://www.dropzonejs.com/), um einen Multi-Bildupload mit Drag 'n Drop zu realisieren.

    Das ganze funktioniert auch soweit, d.h. die Bilder werden hochgeladen und auch im gewünschten Ordner gespeichert.

    Der PHP-Code lautet soweit

    PHP-Code:
    $ds DIRECTORY_SEPARATOR;
    $storeFolder '../../../gallery';
     
    if(!empty(
    $_FILES)) {
      
    $tempFile $_FILES['file']['tmp_name'];
      
    $targetPath dirname__FILE__ ) . $ds$storeFolder $ds;
      
    $targetFile $targetPathstrtolower(str_replace(" ""_"$_FILES['file']['name']));
      
      
    move_uploaded_file($tempFile,$targetFile); 
    Nun habe ich das Script erweitert, denn ich möchte, dass die Bilder höchstens 800 Pixel breit sind:

    PHP-Code:
    $ds DIRECTORY_SEPARATOR;
    $storeFolder '../../../gallery';
     
    if(!empty(
    $_FILES)) {
      
    $tempFile $_FILES['file']['tmp_name'];
      
    $targetPath dirname__FILE__ ) . $ds$storeFolder $ds;
      
    $targetFile $targetPathstrtolower(str_replace(" ""_"$_FILES['file']['name']));
      
      
    move_uploaded_file($tempFile,$targetFile); 
      
      if(
    move_uploaded_file($tempFile,$targetFile)) {
          
    $imagefile $targetFile;
          
            
    $imagesize getimagesize($imagefile);
            
    $imagewidth $imagesize[0];
            
    $imageheight $imagesize[1];
            
            
    $imagetype $imagesize[2];
            switch(
    $imagetype) {
            case 
    1// GIF
              
    $image imagecreatefromgif($imagefile);
              break;
            case 
    2// JPEG
              
    $image imagecreatefromjpeg($imagefile);
              break;
            case 
    3// PNG
              
    $image imagecreatefrompng($imagefile);
              break;
            }
            
                
    $factor $imagewidth 800;
            
    $newHeight $imageheight $factor;
            
    $big imagecreatetruecolor(800$newHeight);
            
    imagecopyresampled($big,$image,0000800$newHeight$imagewidth$imageheight);
            
    $bigfile $imagefile;
            
    imagejpeg($big$bigfile);
            
    imagedestroy($big);    
      }

    Aber es will nicht funktionieren, die Bilder behalten ihre originale Breite. Habt ihr eine Idee warum mein Script nicht funktioniert? Oder gibt es noch viel einfachere Lösungen?

    Bitte nicht über die Namen der Variablen $big und $bigfile wundern, die habe ich so genannt, weil ich später auch noch Thumbs von den Bildern erstellen möchte...

    Danke im Voraus

  • #2
    Du hast schon ganz richtig ein if um das move_uploaded files gebaut, nur hast du vergesse den else Zweig vergessen, mit dem du z.B. eine Fehlermeldung ausgeben kannst....
    Außerdem solltest du mal das error_reporting hochdrehen und beim Hochladen der Bilder unbedingt darauf achten, dass es sich um Bilder handelt und nicht z.B. um PHP-Skripte
    [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
    [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

    Kommentar


    • #3
      Vielen Dank für die Antwort.

      Ich weiß nicht ob du dropzone.js kennst, aber das Script prüft bereits, ob es sich um bestimmte Dateitypen handelt (ich habe jpg und png eingestellt), anderenfalls wird es nicht hochgeladen und der User erhält eine Fehlermeldung. Oder muss ich das Script noch zusätzlich unbedingt per PHP absichern?

      Und Fehler erhalte ich keine ...

      Kommentar


      • #4
        Nutz doch Intervention Image
        https://github.com/Intervention/image

        Kommentar


        • #5
          Danke für den Tipp, werde ich mir mal anschauen.

          Aber seht ihr trotzdem irgendwelche (Denk-)Fehler in meinem Code?

          Kommentar


          • #6
            Sorry für den Doppelpost, ich will euch bloß die Lösung nicht vorenthalten.

            Es funktioniert (warum auch immer), wenn ich die Zeile

            PHP-Code:
            move_uploaded_file($tempFile,$targetFile); 
            entferne.

            Die Zeile danach, also die Abfrage, bleibt aber:

            PHP-Code:
            if(move_uploaded_file($tempFile,$targetFile)) { 
            Manchmal ist mir PHP echt zu hoch.

            Kommentar


            • #7
              move_uploaded_file() verschiebt die hochgeladene Datei an den Zielort. Zunächst wird die Datei, die das Form sendet, automatisch in den temp-Ordner hochgeladen. Mit move_uploaded_file verschiebt man sie dann aus dem temporären Ordner in einen anderen Ordner in dem sie permanent verbleiben kann.

              Wenn du move_uploaded_file ein zweites Mal aufrufst, dann kann die Datei natürlich nicht mehr verschoben werden, weil sie sich schon nicht mehr im temporären Ordner befindet.

              Steht zum Teil auch in der Doku:
              Verschiebt eine hochgeladene Datei an einen neuen Ort
              http://php.net/manual/de/function.mo...oaded-file.php

              Kommentar


              • #8
                Gut zu wissen.

                Danke, die Erklärung hat mir weitergeholfen!

                Kommentar


                • #9
                  Zitat von dazzle89 Beitrag anzeigen
                  Ich weiß nicht ob du dropzone.js kennst, aber das Script prüft bereits, ob es sich um bestimmte Dateitypen handelt (ich habe jpg und png eingestellt),
                  Mach dir bitte auf jeden Fall mal klar, was JS und was PHP ist und wie der (böse) Benutzer dies manipulieren kann.

                  PS: Ich gebe dir einen Tipp, momentan ist es sehr unsicher!
                  [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
                  [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

                  Kommentar


                  • #10
                    Gut zu wissen.
                    Was man nicht weiß, kann man auch einfach mal nachschlagen.
                    [COLOR="#F5F5FF"]--[/COLOR]
                    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                    [COLOR="#F5F5FF"]
                    --[/COLOR]

                    Kommentar


                    • #11
                      Mach dir bitte auf jeden Fall mal klar, was JS und was PHP ist und wie der (böse) Benutzer dies manipulieren kann.

                      PS: Ich gebe dir einen Tipp, momentan ist es sehr unsicher!
                      Du willst doch wahrscheinlich darauf hinaus, dass der Benutzer Javascript deaktivieren kann und man ein PHP-Fallback braucht, oder?

                      Dann werde ich gerne noch zusätzlich per PHP prüfen, dass es sich um jpg und png Dateien handelt. Aber der Upload funktioniert ohne Javascript ja gar nicht, inwiefern ist es dann noch unsicher?

                      Kommentar


                      • #12
                        Zitat von dazzle89 Beitrag anzeigen
                        Du willst doch wahrscheinlich darauf hinaus, dass der Benutzer Javascript deaktivieren kann und man ein PHP-Fallback braucht, oder?

                        Dann werde ich gerne noch zusätzlich per PHP prüfen, dass es sich um jpg und png Dateien handelt. Aber der Upload funktioniert ohne Javascript ja gar nicht, inwiefern ist es dann noch unsicher?
                        Ne, ich will darauf hinaus, dass es ohne Probleme möglich ist (z.B. mit der Entwicklerkonsole) Javascript zu manipulieren und deshalb machen JS Prüfungen für die Sicherheit keinen Sinn!
                        [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
                        [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

                        Kommentar

                        Lädt...
                        X