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

  • dazzle89
    hat ein Thema erstellt Problem mit Verkleinerung bei Bildupload.

    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

  • ChrisvA
    antwortet
    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!

    Einen Kommentar schreiben:


  • dazzle89
    antwortet
    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?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Gut zu wissen.
    Was man nicht weiß, kann man auch einfach mal nachschlagen.

    Einen Kommentar schreiben:


  • ChrisvA
    antwortet
    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!

    Einen Kommentar schreiben:


  • dazzle89
    antwortet
    Gut zu wissen.

    Danke, die Erklärung hat mir weitergeholfen!

    Einen Kommentar schreiben:


  • monolith
    antwortet
    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

    Einen Kommentar schreiben:


  • dazzle89
    antwortet
    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.

    Einen Kommentar schreiben:


  • dazzle89
    antwortet
    Danke für den Tipp, werde ich mir mal anschauen.

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

    Einen Kommentar schreiben:


  • monolith
    antwortet
    Nutz doch Intervention Image
    https://github.com/Intervention/image

    Einen Kommentar schreiben:


  • dazzle89
    antwortet
    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 ...

    Einen Kommentar schreiben:


  • ChrisvA
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X