Schung: getimagesize - read error

Hallo liebe Community!

Nach 2 tagen inet-durchforsten gebe ich mich geschlagen und hoffe hier nun eine antwort zu finden.
ich möchte beim upload einer datei die abmessungen überprüfen und ggf. ändern.
nun versuche ich über getimagesize die abmessungen das hochgeladenen bildes zu überprüfen - leider ohne erfolg!

Der Fehler:

Warning: getimagesize() [function.getimagesize]: Read error! in /var/www/web604/html/galleryv2/php/executive.php on line 62

Der Code:

  
          $npicture = $_POST['npicture'];  
          $npfolder = $_POST['folder'];  
          $uploaddir = "../gallery/" . $npfolder ."/";  
   $uploadfile = $_FILES['npicture']['tmp_name'];  
   $npicture2 = $_FILES['npicture']['name'];  
   move_uploaded_file($uploadfile, "../gallery/" . $npfolder . "/" . $npicture2);  
   chmod("../gallery/" . $npfolder . "/" . $npicture2, 0777);  
   $size = getimagesize("../gallery/" . $npfolder . "/" . $npicure2);  
   $breite = $size['0'];  
   $hoehe = $size['1'];  

habe folgende sachen erfolglos probiert:

  • chmod (siehe oben)
  • getimgaesize direkt von $_FILES
  • absoluten Pfad zu verwenden
  • vorher imagecreateformjpeg ausgeführt

hoffe ihr könnt mir helfen. will nicht über die exifs gehen, da die ja nicht in jeder jpg-datei vorhanden sind.

guten abend noch

  1. Hi Schung,

    Verstehe ich das richtig,

      
    
    >           $npfolder = $_POST['folder'];  
    
    

    dass ein Benutzer des Uploadformulars den Unterpfad, in dem das Bild gespeichert wird, voellig beliebig bestimmen darf?
    Ich kann mir nicht viele Szenarien vorstellen, in denen das sinnvoll ist - aber wenn Du das willst, dann musst Du pruefen, ob der angegebene Pfad auch ein solcher ist. Wenn dort jemand Unsinn eingibt, dann wird

      
    
    >    move_uploaded_file($uploadfile, "../gallery/" . $npfolder . "/" ...  
    
    

    nicht funktionieren, und Du kriegst es nicht mit, weil Du auch den Rueckgabewert von move_uploaded_file nicht auswertest. Und wenn das schiefgegangen ist und daher das File in deinem $npfolder-Pfad nicht existiert, dann gibt es bei

      
    
    >    $size = getimagesize("../gallery/" . $npfolder . "/" . $npicure2);  
    
    

    einen Lesefehler, und der heisst auf englisch Read Error ;-) Das waere so meine Vermutung, was hier passiert.

    Im uebrigen gibt es fuer

      
    
    >           $npfolder = $_POST['folder'];  
    
    

    keinen guten Grund. Benutze doch die Variable $_POST['folder'] direkt.

    Viele Gruesse,
    der Bademeister

    1. es handelt sich hierbei um ein admin-panel.

      die variable "npfolder" wird über ein dropdown-menü angesteuert, sodass nur ordner ausgewählt werden können, die tatsächlich auch existieren.

      move_uploaded_file funktioniert auch, da sich nach dem ausführen die datei auch auf dem webserver befindet.

      die variablen benutze ich, da es so für mich übersichtlicher wird.

      1. Hi,

        die variable "npfolder" wird über ein dropdown-menü angesteuert, sodass nur ordner ausgewählt werden können, die tatsächlich auch existieren.

        Nein, das kann am Client beliebig manipuliert werden.
        Ausserdem gibt es ja vielleicht auch Verzeichnisse, die zwar existieren, in die aber trotzdem nichts hochgeladen werden sollte.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. ok, fragt mich jz ne, warum es auf einma geht!
          habe folgendes gemacht:

          den pfad in eine variable geschrieben:

          $test = "../gallery/" . $npfolder . "/" . $npicture2;
          und dann
          $size = getimagesize($test);

          geschrieben - und es geht!

          weiß einer, was daran nun ander ist?

          1. echo $begrüßung;

            $size = getimagesize("../gallery/" . $npfolder . "/" . $npicure2);
            $test = "../gallery/" . $npfolder . "/" . $npicture2;
            weiß einer, was daran nun ander ist?

            Das übliche Problem. Schalte das error_reporting auf E_ALL (und display_errors auf on), dann bekommst du eine Notice-Meldung, wenn du auf nicht vorhandene Variablen zuzugreifen versuchst, beispielsweise bei einem Vertipper.

            die variablen benutze ich, da es so für mich übersichtlicher wird.

            Die Komplexität durch noch mehr Variablen zu erhöhen soll übersichtlicher sein?

            echo "$verabschiedung $name";

      2. Hello,

        es handelt sich hierbei um ein admin-panel.

        Auch ein "Admin", sollte es nicht wirklich der Systemadmin sein, sollte keinen Zugriff auf Dateien außerhalb eines eng umrissenen Umfeldes haben - und über http schon gar nicht!

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
      3. es handelt sich hierbei um ein admin-panel.

        Ok, das legitimiert die Vorgehensweise, dass der Pfad clientseitig bestimmt werden darf. Aus philosophischen (bzw. ganz praktischen, sicherheitsbedingten) Gründen würde ich Dir trotzdem dringend raten, sowohl die angegebenen Pfade serverseitig zu prüfen, als auch die Rückgabewerte der benutzten Funktionen auszuwerten und gegebenenfalls Fehler kontrolliert abzufangen. Dann hättest Du auch schneller und allein rausgefunden, dass

          
        
        > $size = getimagesize("../gallery/" . $npfolder . "/" . $npicure2);  
        
        

        hier ein t im letzten Variablennamen fehlt und daher nix klappt[1] ;-)

        Zum Thema Variablen umschreiben: Ich will Dir wirklich nicht in Deinen Programmierstil reinquatschen, sage Dir aber meine Meinung:
        Durch überflüssiges Variablenumschreiben machst Du aus einem 5-Zeilen-Code einen 10-Zeilen-Code mit dem Effekt, dass Du im eigentlichen Code den Variablen nicht mehr ansiehst, wo sie herkommen und welche die vom Benutzer übergebenen Werte sind. Die Benutzung der superglobalen Arrays ($_POST, $_FILES, ...) direkt ist gewöhnungsbedürftig, aber sehr sehr sinnvoll: man sieht den gefährlichen, weil vom Client kommenden Variablen an, dass sie eben solche sind. Dadurch ist, wenn man sich mal daran gewöhnt hat, der Code dann auch übersichtlicher, finde ich.

        [1] Ich hab das beim ersten Mal auch nicht gesehen - nicht dass Du denkst, ich hätte es Dir aus Spaß nicht gesagt ;-)

        Viele Grüße
        der Bademeister

        1. $size = getimagesize("../gallery/" . $npfolder . "/" . $npicure2);

          
          >   
          > hier ein t im letzten Variablennamen fehlt und daher nix klappt[1] ;-)  
            
          ich könnt mich hauen! danke dir :-)  
            
          wie immer war der zweifel an der syntax größer als an der richtigschreibung ^^