JPEG einlesen und weiterverarbeiten -> Fehler

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

  • JPEG einlesen und weiterverarbeiten -> Fehler

    Hallo,

    ich frage eine POP3 Mailbox ab und filtere aus dieser alle angehängten JPEG Bilder.

    Funktioniert alles sehr gut, bis auf einen Fehler, der allerdings scheinbar erst während der Weiterverarbeitung mit GD passiert.
    Nach der Verarbeitung mit GD Funktionen ist das Bild nur noch schwarz.

    Das gespeicherte Bild nach Verarbeitung der Mail ist allerdings einwandfrei. Habe auch Tests durchlaufen lassen (base64_encode & base64_decode) um eventuelle, fehlerhafte Einträge (die der Maildecoder verursacht hat) zu entdecken.

    Sieht aber alles einwandfrei aus. Lustig ist, das einige Bilder einwandfrei gespeichert werden, andere wiederum nicht.
    Ein fehlerhaftes Bild (was nach Verarbeitung nur noch schwarz ist) hat nach base64_encode am ende der Zeichenkette 2 sichtbare "=". Das dürfte jedoch auch nichts ausmachen, oder?

    Wo kann da der Fehler stecken? Ich bin total ratlos.
    Der Fehler muss irgendwo in den Bilddateien liegen, denn im Prinzip verarbeitet er mir ja die meisten richtig

  • #2
    können die beiden = nicht doch aus der mail sein?

    werden die ganzen blöcke in der mail nicht auch so getrennt?
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Über 100 Postings und nicht ansatzweise ne vernünftie Problembeschreibung.

      Wenn du schon im PHP-Forum postest, wäre es hilfreich, wenn du wenigstens ansatzweise aufzählst, welche Funktionen du verwendest. Entsprechender Code ist NIE falsch. Du hast das Problem doch schon auf die GD beziehen können. also beispiele, Soll und Ist-Zustand, debugging (ohne den ganzen Mailkram), ...

      Kommentar


      • #4
        Ja sorry, ich wusste ehrlich gesagt nicht wo ich anfangen soll, da es etwas umfangreich ist...

        Jetzt bin ich (so denke ich) ansatzweise draufgekommen wo das Problem liegen könnte.

        Beim Abholen der Mails rufe ich den Maildecoder folgendermaßen auf:

        PHP-Code:
        $decoder=new MIMEDECODE($mail$mail_sender);
            
        $decoded $decoder->get_parsed_message(); 
        Die Variable $mail_sender und auch $mail enthalten Werte (mit echo geprüft)

        Doch beim manuellen Auruf des Scriptes (anstatt mit Cronjob) gibt er mir folgende Fehlermeldung:

        Code:
        436711246038
        Warning: Missing argument 2 for mimedecode() in
         /var/www/web0/html/cron/mmsmail/mimedecode.php on line 67
        /var/www/web0/html/cron/pop3_temp/Bild003.jpg;436711246038
        Warning: Missing argument 2 for mimedecode() in
         /var/www/web0/html/cron/mmsmail/mimedecode.php on line 67
        /var/www/web0/html/cron/pop3_temp/Bild003.jpg;
        436711246038/var/www/web0/html/cron/pop3_temp/Bild001.jpg;436711246038
        Warning: Missing argument 2 for mimedecode() in
         /var/www/web0/html/cron/mmsmail/mimedecode.php on line 67
        /var/www/web0/html/cron/pop3_temp/Bild003.jpg;
        436711246038/var/www/web0/html/cron/pop3_temp/Bild001.jpg;
        436611268874/var/www/web0/html/cron/pop3_temp/Bild001.jpg;
        Seltsam, denn bevor ich das ganze als Cronjob eingestellt habe hat er mir ohne Fehlermeldungen alles durchgeführt.

        Hier also der Auszug aus der mimecode.php:

        PHP-Code:
                function MIMEDECODE($input$_bar)
                {
                    list(
        $header$body)   = $this->_split_body_header($input);
            
                    
        $this->_input          $input;
                    
        $this->_header         $header;
                    
        $this->_body           $body;
                    
        $this->bar               $_bar;
                    
        $this->_decode_bodies  true;
                    
        $this->_include_bodies true;
                    
                    
        $this->mailMimeDecode  true;
                } 
        Ich kann hier auf den ersten Blick nicht sehen, wo der Fehler liegt.

        Kommentar


        • #5
          $decoder=new MIMEDECODE($mail, $mail_sender);
          Das ist Zeile 67?

          Eigentlich deutet der genannte Fehler daraf, dass kein zweiter parameter angegeben wurde. Ob der leer ist, sollte keine rolle spielen. Zumindest nicht für diese Fehlermeldung.

          Kommentar


          • #6
            Original geschrieben von TobiaZ
            Das ist Zeile 67?
            Ja, ist Zeile 67. Wundert mich ehrlich gesagt auch stark...
            Ich bin unmittelbar ratlos, zumal das ganze ja schon funktioniert hat ?!

            Kommentar


            • #7
              bzw. sorry, zeile 67 ist der letzte php-code meines vorigen posts. die erste zeile davon

              Kommentar


              • #8
                Dein Fehler muss woanders liegen. An dem von dir geposteten Code kann es nicht liegen.

                Sicher, dass du die richtige Datei geprüft hast?

                Kommentar


                • #9
                  Ja, es sind gesamt 3 Dateien. 1 Hauptdatei, und dann noch die pop3klasse & mimedecoder. Habe auch mit Sicherheit die richtigen Dateien angeschaut.

                  Ich poste hier mal den Code der Hauptdatei, der ist nich solange wie der Rest...

                  PHP-Code:
                  <?php
                          
                  function shownumber($sString$cDelimiter)
                  {
                  return (
                  substr($sString0, (int) strpos($sString$cDelimiter)));
                  }

                  //echo phpinfo();
                  $server "localhost";
                  $user "web0";
                  $pass "xxxxxxxx";
                  $db_1 "usr_web0_1";

                  $verbindung = @mysql_connect($server$user$pass);
                  if(
                  $verbindung) {
                  mysql_select_db($db_1$verbindung);
                  } else {
                  die(
                  "<b>Verbindung zum MySQL Server konnte nicht hergestellt werden");
                  }

                  $pop_server "mail.meinedomain.com";
                  $pop_user "web0p16";
                  $pop_pass "pwd";

                  include(
                  "mmmail/pop3klasse.php");
                  include(
                  "mmmail/mimedecode.php");

                  // pop3 öffnen
                  $pop3 = & new POP3();
                  $pop3->connect($pop_server$pop_user$pop_pass);
                  // irgendein fehler ?
                  if( $error $pop3->open() || $error $pop3->login() || $error $pop3->stat() ){
                      echo 
                  $error;
                      return;
                  }
                  // überhaupt mails da?
                  $count_array $pop3->listing();
                  if( !
                  $count count$count_array ) ) {
                      echo 
                  'keine Mails';
                      return;
                  }
                  // alle mails holen und auf pop3 löschen
                  $mails = array();
                              
                  $ids $pop3->ids();
                  for( 
                  $i=1$i<=$count; ++$i ){
                      
                  $headers $body '';
                      if( 
                  $error $pop3->retrieve$i$headers$body ) ){
                          continue;
                      }
                                          for( 
                  $line 0;$line count$headers );$line++ ) {
                                          
                  $h .= addslashes$headers[$line] ) . "\r\n";
                                      } 
                                      for( 
                  $line 0;$line count$body );$line++ ) {
                                          
                  $b .= addslashes$body[$line] ) . "\r\n";
                                      } 
                                      
                  $row "('" $ids[$ii] . "',1,'$h','$b')";
                                  
                  $sql .= ( $sql?",":"" ) . $row;
                      
                  $temp explode("\r\n\r\n",$body);
                      
                  $headers    implode("\r\n",$headers);
                      
                  $body        implode("\r\n",$body);
                      
                  $sqlinsert "INSERT INTO foto_mails (mail_id, mailserver_id, server_id, header, body) 
                  VALUES ('', '"
                  .$ids[$i]."', '1', '$h', '$b')";
                      
                  $sqldo mysql_query($sqlinsert);
                      
                  $mails[] = $headers."\r\n\r\n".$body;

                   
                  // $pop3->delete($i);
                      
                  $decoded = array();
                  foreach (
                  $mails as $mail) {
                  $from $subject '';
                  $mail_vonnummer ereg_replace("Resent-From""Resent"$mail);
                  preg_match('#From: (.*)#i',$mail_vonnummer,$from);
                  $mail_sender substr($from[0], 6);
                  $strText $mail_sender;
                  $mail_sender shownumber($strText'@');
                  // echo $mail;
                  // echo $mail_sender
                  $decoder=new MIMEDECODE($mail$mail_sender);
                      
                  $decoded $decoder->get_parsed_message();
                  print_r($decoded);
                  unset(
                  $decoded);
                  }

                  }
                  // pop3 schliessen
                  $pop3->disconnect();
                  EDIT:
                  Code an 1 stelle umgebrochen
                  Zuletzt geändert von chrisphp; 29.10.2005, 21:19.

                  Kommentar


                  • #10
                    Ich bin mir da nicht SO sicher.

                    Fehler ist in cron/mmsmail/mimedecode.php

                    Dein Code stammt aber offensichtlich aus der Hauptdatei (cron/index.php?)

                    Kommentar


                    • #11
                      ja, das war die hauptdatei.
                      hier der teil der von mir geändert wurde aus der mimedecode.php:

                      PHP-Code:
                          class MIMEDECODE 
                          
                      {
                          
                              
                      /**
                               * The raw email to decode
                               * @var    string
                               */
                              
                      var $_input;
                          
                              
                      /**
                               * The header part of the input
                               * @var    string
                               */
                              
                      var $_header;
                          
                              
                      /**
                               * The body part of the input
                               * @var    string
                               */
                              
                      var $_body;
                              var 
                      $bar;
                          
                              
                      /**
                               * If an error occurs, this is used to store the message
                               * @var    string
                               */
                              
                      var $_error;
                          
                              
                      /**
                               * Flag to determine whether to include bodies in the
                               * returned object.
                               * @var    boolean
                               */
                              
                      var $_include_bodies;
                          
                              
                      /**
                               * Flag to determine whether to decode bodies
                               * @var    boolean
                               */
                              
                      var $_decode_bodies;
                          
                              
                      /**
                               * Flag to determine whether to decode headers
                               * @var    boolean
                               */
                              
                      var $_decode_headers;
                          
                              
                      /**
                              * If invoked from a class, $this will be set. This has problematic
                              * connotations for calling decode() statically. Hence this variable
                              * is used to determine if we are indeed being called statically or
                              * via an object.
                              */
                              
                      var $mailMimeDecode;
                              
                              
                      /**
                               * Constructor.
                               *
                               * Sets up the object, initialise the variables, and splits and
                               * stores the header and body of the input.
                               *
                               * @param string The input to decode
                               * @access public
                               */
                              
                      function MIMEDECODE($input$_bar)
                              {
                                  list(
                      $header$body)   = $this->_split_body_header($input);
                          
                                  
                      $this->_input          $input;
                                  
                      $this->_header         $header;
                                  
                      $this->_body           $body;
                                  
                      $this->bar               $_bar;
                                  
                      $this->_decode_bodies  true;
                                  
                      $this->_include_bodies true;
                                  
                                  
                      $this->mailMimeDecode  true;
                              }
                              
                              function 
                      getBar() {
                           return 
                      $this->bar;

                      Alles unter diesem Code wurde nicht verändert und ist auch weitere 820 zeilen lang.

                      Ganz ehrlich: Ich bin ratlos wo der Fehler sein könnte...

                      Kommentar


                      • #12
                        mag ja sein, dass dieser Teil geändert wurde. das heißt aber nicht, dass mir der Ohne jede Zeilenangabe weiterhilft und auch nicht, dass der ungeänderte teil einfach so weiter mit deinem teil funktioniert.

                        ich nehme an, vor dem code liegen noch zwei zeilen?

                        Kommentar


                        • #13
                          Da der Code so umfangreich ist hänge ich die gesamte mimedecode mal als .txt an diesen post
                          Angehängte Dateien

                          Kommentar


                          • #14
                            gerade mal den code getestet. auch da kein fehler drin.

                            ruf mal bitte nur die mail-klasse auf. ohne alles andere.

                            Kommentar


                            • #15
                              keine fehlermeldung. mailklasse (pop3klasse.php) arbeitet einwandfrei

                              Kommentar

                              Lädt...
                              X