Ankündigung

Einklappen
Keine Ankündigung bisher.

Soap Webservice ignoriert base64 codierte .png

Einklappen

Neue Werbung 2019

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

  • Soap Webservice ignoriert base64 codierte .png

    Hallo,

    Ich bastel gerade an einen Soap Webservice, ich will das Bilder extern hochgeladen werden können, klappt auch bei .jpeg und .gif, bei .png klappt das ganze aber nicht obwohl ich keinerlei Restriktionen für bestimmte Dateitypen eingebaut habe im Moment.

    Ich wandle das Bild mit Base64 um und schicken es dann an den Server, der type in der wsdl sollte stimmen:
    PHP-Code:
    <part name="file" type="xsd:base64Binary"/> 
    dann die eigentliche Funktion (wobei $file das base64 codierte Bild ist) ->

    PHP-Code:
            $decode base64_decode($file);
            
    $fh fopen($decode'w');
            
    $newPic fwrite($fh$decode);
         
            
    fclose($fh);
           
          
             
    copy($decode'Images/'.$Username);
             
    unlink($decode);   

            return 
    true
    Leider funktioniert das nicht, wenn jedoch $file ein .gif oder .jpeg ist liegt es im Image Ordner, wenn ich jetz aber einen anderen Dateityp sende zbsp. .png passiert nichts aber "true" wird zurückgegebn also eine Fehlermeldung tritt nicht auf.

  • #2
    Natürlich bekommst du true zurück, weil solange keine der zeilen vorher einen fatal-error macht und das script beendet, es immer zum return true; kommen wird.

    Als erstes solltest du vielleicht mal die rückgabe-werte der einzelnen Funktionen überprüfen:

    base64_decode kann ab php 5.2 mit $strict = true ein boolsches false zurückgeben, damit kannst du erstmal überprüfen ob base64_decode was mit den ankommenden daten anfangen kann

    als nächstes dann schauen was fopen, fwrite, copy zurückgeben.


    Ausserdem macht der code für mich auf den ersten blick keinen sinn.

    PHP-Code:
            $decode base64_decode($file); 
    was ist $decode dann ? datei-inhalt ? dateiname ?
    PHP-Code:
            $fh fopen($decode'w');
            
    $newPic fwrite($fh$decode); 
    du öffnest die datei mit dem pfad der in $decode steht UND schreibst den Inhalt von $decode rein ? Sollte $decode der inhalt sein, also binäre daten die das bild darstellen ... ROFL ... wie soll er das als PFAD verwenden ? und wenn es der Pfad ist ... wie soll ein intaktes png ankommen wenn du in die bild-datei nen pfad reinschreibst ?

    Also bitte mal ordentlich deinen code testen, du hast KEINERLEI fehlerbehandlung darin, daher auch immer TRUE ...
    [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
    | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

    Kommentar


    • #3
      Zitat von robo47 Beitrag anzeigen
      Natürlich bekommst du true zurück, weil solange keine der zeilen vorher einen fatal-error macht und das script beendet, es immer zum return true; kommen wird.
      Ja natürlich genau, ich sage doch auch nichts anderes hab ja gesagt das true ausgeben wird, also kein schwerwiegender Fehler auftritt

      Zitat von robo47 Beitrag anzeigen
      Als erstes solltest du vielleicht mal die rückgabe-werte der einzelnen Funktionen überprüfen:

      base64_decode kann ab php 5.2 mit $strict = true ein boolsches false zurückgeben, damit kannst du erstmal überprüfen ob base64_decode was mit den ankommenden daten anfangen kann

      als nächstes dann schauen was fopen, fwrite, copy zurückgeben.


      Ausserdem macht der code für mich auf den ersten blick keinen sinn.

      PHP-Code:
              $decode base64_decode($file); 
      was ist $decode dann ? datei-inhalt ? dateiname ?
      jep - > $decode = datei-inhalt

      Zitat von robo47 Beitrag anzeigen
      PHP-Code:
              $fh fopen($decode'w');
              
      $newPic fwrite($fh$decode); 
      du öffnest die datei mit dem pfad der in $decode steht UND schreibst den Inhalt von $decode rein ? Sollte $decode der inhalt sein, also binäre daten die das bild darstellen ... ROFL ... wie soll er das als PFAD verwenden ? und wenn es der Pfad ist ... wie soll ein intaktes png ankommen wenn du in die bild-datei nen pfad reinschreibst ?

      Also bitte mal ordentlich deinen code testen, du hast KEINERLEI fehlerbehandlung darin, daher auch immer TRUE ...
      Das mit dem True ist klar, jedoch funktioniert mein code so wie er soll bei .jpeg und .gif Datein und das ist für mich nich logisch wieso es bei .png nicht funktioniert.
      Und natürlich wird auch geprüft ob z.bsp $file überhaupt gesetzt ist, das war ein kleiner auszug der relevant ist.

      Aber thx das mit dem fopen ist und dem fwrite ist falsch werd mich da drum jetz mal kümmern : ) trotzdem find ich es unlogisch das es bei .jpeg oder .gif funktioniert.

      Kommentar


      • #4
        Zitat von kn0wledge Beitrag anzeigen
        jep - > $decode = datei-inhalt
        Dass das ganze mit jpeg oder gifs funktioniert ist dann wahrscheinlich purer Zufall, weil wenn du $decode was der inhalt ist, als dateipfad verwendest ... wie das am ende interpretiert wird will ich garnicht wissen, vielleicht enthalten pngs dann wirklich zeichen die ein problem machen ...
        [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
        | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

        Kommentar


        • #5
          ok thx habs jetz so gelöst:

          PHP-Code:
                  if (isset($file) && $file != NULL)
                  {
                  
          $filepath 'Uploads/'.uniqid();         
                  
          $decode base64_decode($file);      
                  
          $fh fopen($filepath'w');
                  
          $newPic fwrite($fh$decode);     
                  
          fclose($fh);        
                  
          unlink($decode); 
                    if(
          exif_imagetype($filepath) == || exif...... =  2 etc)
                  { 
                    return 
          'erfolgreich...';  
                      
                  } else { 
                                
          unlink($filepath);
                                return 
          'falscher Dateityp....';
                                }         
                 
                 } 
          gibt es eine Möglichkeit den Dateityp zu prüfen bevor er auf die Platte geschrieben wird?

          Kommentar

          Lädt...
          X