Fatal error: Cannot use object of type stdClass as array

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

  • Fatal error: Cannot use object of type stdClass as array

    hallo,

    meine ex hatte mir dieses script geschrieben (leider) und nun habe ich momentan keinen so guten kontakt mehr zu ihr
    im grunde geht es so:
    man schickt ein foto per mail an eine mailadresse.
    das script wird aufgerufen, das postfach abgerufen und das foto mit forllaufender nummer in ein verzeichnis gespeichert.

    jetzt kommt plötzlich diese fehlermeldung und ich weiß überhaupt nicht woran das liegen könnte

    ich hoffe hier hilfe zu finden.
    danke
    sascha

    Datei wird wie folgt abgespeichert:
    Name des Verzeichnisses 'dann' $basename' 'fünfstellige_Nummer_fortlaufend.jpg oder gif
    je nach Ausgangsdatei
    Im $basename wird der Mittelteil des Dateinamens festgelegt.
    bilderfoto00001.jpg
    i diesem Fall:
    bilderfoto00001.jpg
    Im Verzeichnis sollte eine Datei ohne fortlaufende Nummer liegen:
    bilderfoto.jpg / bilderfoto.gif
    Sonst wird diese als erste angelegt


    PHP-Code:
    <?
     
    /* Konfiguration */
    $conf = array();
    $conf['host'] = '{imap.domain.tld}'; //Accountzugang welches Postfach abgerufen werden soll
    $conf['username'] = '123'; // Zugangsdaten
    $conf['password'] = 'pw'; //Passwort
    $conf['path'] = './verzeichnis'; //Bilder werden in dieses Verzeichnis kopiert
    $conf['ext'] = array(".gif",".jpg",".jpeg"); //erlaubte Dateiendungen
     
    /* AB HIER NICHTS MEHR EDITIEREN */
    $mbox = imap_open ($conf['host'],$conf['username'],$conf['password']);
    $headers = imap_headers ($mbox);
    if ($headers == false) {
    echo "Nothing to do!
    \n";
    }else{
    while (list ($key, $val) = each ($headers)) {
    $mid = $key + 1;
    $header = imap_header($mbox, $key+1);
    $struct = imap_fetchstructure($mbox, $key+1);
    extract_attachments($mbox,$mid);
    imap_delete($mbox,$mid);
    }
    imap_expunge($mbox);
    imap_close ($mbox);
    }
    function extract_attachments($mbox,$mid)
    {
    global $conf;
    $struct = imap_fetchstructure($mbox, $mid);
    $parts = $struct->parts;
    $i = 0;
    if (!$parts)
    {
    $attachment = array();
    $content = imap_body($mbox, $mid);
    }
    else
    {
    $endwhile = false;
    $stack = array();
    $content = "";
    $attachment = array();
    while (!$endwhile)
    {
    if (!$parts[$i])
    {
    if (count($stack) > 0)
    {
    $parts = $stack[count($stack)-1]["p"];
    $i = $stack[count($stack)-1]["i"] + 1;
    array_pop($stack);
    }
    else
    {
    $endwhile = true;
    }
    }
    if (!$endwhile)
    {
    $partstring = "";
    foreach ($stack as $s)
    {
    $partstring .= ($s["i"]+1) . ".";
    }
    $partstring .= ($i+1);
    if (strtoupper($parts[$i]->disposition) == "ATTACHMENT")
    { /* Attachment */
    $attachment[] = array("filename" => $parts[$i]->parameters[0]->value,
    "filedata" => imap_fetchbody($mbox, $mid, $partstring));
    $encoding = $parts[$i]->encoding;
    $ext = strrchr($parts[$i]->parameters[0]->value,'.');
    if (in_array($ext, $conf['ext']))
    {
    $ext == '.jpeg' ? $basename = substr($parts[$i]->parameters[0]->value, 0, -5) : $basename = substr($parts[$i]->parameters[0]->value, 0, -4);
    #files sollen immer den gleich namen mit forlaufender Nr. haben
    $basename = 'foto'; // Hier steht der Mittelteil des Dateinamens
    echo "Bild gefunden: ".$parts[$i]->parameters[0]->value."
    ";
    if(file_exists($conf['path'] . $basename . $ext))
     
    {
    $i = 1;
    if(file_exists($conf['path'] . $basename . $ext))
    {
    while(file_exists($conf['path'] . $basename . sprintf("%05s", $i) . $ext))
    {
    $i++;
    }
    }
     
    $fp = fopen($conf['path'] . $basename . sprintf("%05s", $i) . $ext,"w+");
    }
    else
    {
    $fp = fopen($conf['path'] . $basename . $ext,"w+");
    }
    if ($encoding == 3)
    {
    fwrite($fp, base64_decode(imap_fetchbody($mbox, $mid, $partstring)));
    }
    else
    {
    fwrite($fp, imap_fetchbody($mbox, $mid, $partstring));
    }
    }
    }
    }
    if ($parts[$i]->parts) {
    $stack[] = array("p" => $parts, "i" => $i);
    $parts = $parts[$i]->parts;
    $i = 0;
    } else {
    $i++;
    }
    }
    }
    }
    ?>
     
     
    Es sollte 3 Mailaccounts geben.
    pop3 mail1
    pop3 mail2
    weiterleitung mail 3
     
    besucher mailt foto an mail3
    mail3 leitet weiter an mail1 und mail2
     
    mail1 wird autom. abgerufen und gelöscht
    mail2 ist eine sicherung um auf alle mails jederzeit zugreifen zu können
     
    Datei wird wie folgt abgespeichert:
    Name des Verzeichnisses 'dann' $basename' 'fünfstellige_Nummer_fortlaufend.jpg oder gif
    je nach Ausgangsdatei
    Im $basename wird der Mittelteil des Dateinamens festgelegt.
    bilderfoto00001.jpg
    i diesem Fall:
    bilderfoto00001.jpg
    Im Verzeichnis sollte eine Datei ohne fortlaufende Nummer liegen:
    bilderfoto.jpg / bilderfoto.gif
    Sonst wird diese als erste angelegt
     
    <?
     
    /* Konfiguration */
    $conf = array();
    $conf['host'] = '{imap.sorkosys.de}'; //Accountzugang welches Postfach abgerufen werden soll
    $conf['username'] = 'photo@sorkosys.de'; // Zugangsdaten
    $conf['password'] = 'test'; //Passwort
    $conf['path'] = './sorkosys'; //Bilder werden in dieses Verzeichnis kopiert
    $conf['ext'] = array(".gif",".jpg",".jpeg"); //erlaubte Dateiendungen
     
    /* AB HIER NICHTS MEHR EDITIEREN */
    $mbox = imap_open ($conf['host'],$conf['username'],$conf['password']);
    $headers = imap_headers ($mbox);
    if ($headers == false) {
    echo "Nothing to do!
    \n";
    }else{
    while (list ($key, $val) = each ($headers)) {
    $mid = $key + 1;
    $header = imap_header($mbox, $key+1);
    $struct = imap_fetchstructure($mbox, $key+1);
    extract_attachments($mbox,$mid);
    imap_delete($mbox,$mid);
    }
    imap_expunge($mbox);
    imap_close ($mbox);
    }
    function extract_attachments($mbox,$mid)
    {
    global $conf;
    $struct = imap_fetchstructure($mbox, $mid);
    $parts = $struct->parts;
    $i = 0;
    if (!$parts)
    {
    $attachment = array();
    $content = imap_body($mbox, $mid);
    }
    else
    {
    $endwhile = false;
    $stack = array();
    $content = "";
    $attachment = array();
    while (!$endwhile)
    {
    if (!$parts[$i])
    {
    if (count($stack) > 0)
    {
    $parts = $stack[count($stack)-1]["p"];
    $i = $stack[count($stack)-1]["i"] + 1;
    array_pop($stack);
    }
    else
    {
    $endwhile = true;
    }
    }
    if (!$endwhile)
    {
    $partstring = "";
    foreach ($stack as $s)
    {
    $partstring .= ($s["i"]+1) . ".";
    }
    $partstring .= ($i+1);
    if (strtoupper($parts[$i]->disposition) == "ATTACHMENT")
    { /* Attachment */
    $attachment[] = array("filename" => $parts[$i]->parameters[0]->value,
    "filedata" => imap_fetchbody($mbox, $mid, $partstring));
    $encoding = $parts[$i]->encoding;
    $ext = strrchr($parts[$i]->parameters[0]->value,'.');
    if (in_array($ext, $conf['ext']))
    {
    $ext == '.jpeg' ? $basename = substr($parts[$i]->parameters[0]->value, 0, -5) : $basename = substr($parts[$i]->parameters[0]->value, 0, -4);
    #files sollen immer den gleich namen mit forlaufender Nr. haben
    $basename = 'foto'; // Hier steht der Mittelteil des Dateinamens
    echo "Bild gefunden: ".$parts[$i]->parameters[0]->value."
    ";
    if(file_exists($conf['path'] . $basename . $ext))
     
    {
    $i = 1;
    if(file_exists($conf['path'] . $basename . $ext))
    {
    while(file_exists($conf['path'] . $basename . sprintf("%05s", $i) . $ext))
    {
    $i++;
    }
    }
     
    $fp = fopen($conf['path'] . $basename . sprintf("%05s", $i) . $ext,"w+");
    }
    else
    {
    $fp = fopen($conf['path'] . $basename . $ext,"w+");
    }
    if ($encoding == 3)
    {
    fwrite($fp, base64_decode(imap_fetchbody($mbox, $mid, $partstring)));
    }
    else
    {
    fwrite($fp, imap_fetchbody($mbox, $mid, $partstring));
    }
    }
    }
    }
    if ($parts[$i]->parts) {
    $stack[] = array("p" => $parts, "i" => $i);
    $parts = $parts[$i]->parts;
    $i = 0;
    } else {
    $i++;
    }
    }
    }
    }
    ?>
    Zuletzt geändert von sascha_kote; 30.04.2010, 20:02. Grund: sorry

  • #2
    Bitte nutz die PHP-Tags für deinen Code. So kann das keiner lesen.

    Danke
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Und wenn du noch so nett wärst, die Zeilennummer anzugeben, die in der Fehlermeldung genannt wird und diese Zeile im Code mit einem Kommentar hervorzuheben, könnte man sogar noch rauskriegen, woran es liegt, ohne alle 264 Zeilen lesen zu müssen.

      Gruß,

      Amica
      Zuletzt geändert von AmicaNoctis; 30.04.2010, 21:31.
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Schon besser. Jetzt sorge bitte auch noch dafür, dass der Code sauber eingerückt ist. Denn man kann immer noch nicht die Struktur erkennen. Um das Problem zu finden, müsste man vorher den gesamten Code per Hand formatieren. Und dazu wird hier wohl keiner bereit sein. Geht übrigens wunderbar, wenn du noch mal mit Copy&Paste arbeitest.

        Danke
        Peter

        PS:
        meine ex hatte mir dieses script geschrieben
        Du lässt das von einer Frau machen? Und die heißt nicht AmicaNoctis. Armer Kerl.

        SCNR
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          der fehler soll in zeite 117 sein.
          danke für die hähme - hab ich wohl verdient


          PHP-Code:
          <?

          /* Konfiguration */
          $conf = array();
          $conf['host']     = '{imap.domain}';     //Accountzugang welches Postfach abgerufen werden soll
          $conf['username'] = 'user';                    // Zugangsdaten
          $conf['password'] = 'test123';                //Passwort
          $conf['path']     = './verz';       //Bilder werden in dieses Verzeichnis kopiert
          $conf['ext']      = array(".gif",".jpg",".jpeg"); //erlaubte Dateiendungen
           
          /* AB HIER NICHTS MEHR EDITIEREN */
          $mbox = imap_open ($conf['host'],$conf['username'],$conf['password']);
          $headers = imap_headers ($mbox);
          if ($headers == false) {
          echo "Nothing to do!
          \n";
          }else{
          while (list ($key, $val) = each ($headers)) {
          $mid = $key + 1;
          $header = imap_header($mbox, $key+1);
          $struct = imap_fetchstructure($mbox, $key+1);
          extract_attachments($mbox,$mid);
          imap_delete($mbox,$mid);
          }
          imap_expunge($mbox);
          imap_close ($mbox);
          }
          function extract_attachments($mbox,$mid)
          {
          global $conf;
          $struct = imap_fetchstructure($mbox, $mid);
          $parts = $struct->parts;
          $i = 0;
          if (!$parts)
          {
          $attachment = array();
          $content = imap_body($mbox, $mid);
          }
          else
          {
          $endwhile = false;
          $stack = array();
          $content = "";
          $attachment = array();
          while (!$endwhile)
          {
          if (!$parts[$i])
          {
          if (count($stack) > 0)
          {
          $parts = $stack[count($stack)-1]["p"];
          $i = $stack[count($stack)-1]["i"] + 1;
          array_pop($stack);
          }
          else
          {
          $endwhile = true;
          }
          }
          if (!$endwhile)
          {
          $partstring = "";
          foreach ($stack as $s)
          {
          $partstring .= ($s["i"]+1) . ".";
          }
          $partstring .= ($i+1);
          if (strtoupper($parts[$i]->disposition) == "ATTACHMENT")
          { /* Attachment */
          $attachment[] = array("filename" => $parts[$i]->parameters[0]->value,
          "filedata" => imap_fetchbody($mbox, $mid, $partstring));
          $encoding = $parts[$i]->encoding;
          $ext = strrchr($parts[$i]->parameters[0]->value,'.');
          if (in_array($ext, $conf['ext']))
          {
          $ext == '.jpeg' ? $basename = substr($parts[$i]->parameters[0]->value, 0, -5) : $basename = substr($parts[$i]->parameters[0]->value, 0, -4);
          #files sollen immer den gleich namen mit forlaufender Nr. haben
          $basename = 'foto';                                                 // Hier steht der Mittelteil des Dateinamens
          echo "Bild gefunden: ".$parts[$i]->parameters[0]->value."
          ";
          if(file_exists($conf['path'] . $basename . $ext))

          {
          $i = 1;
          if(file_exists($conf['path'] . $basename . $ext))
          {
          while(file_exists($conf['path'] . $basename . sprintf("%05s", $i) . $ext))
          {
          $i++;
          }
          }

          $fp = fopen($conf['path'] . $basename . sprintf("%05s", $i) . $ext,"w+");
          }
          else
          {
          $fp = fopen($conf['path'] . $basename . $ext,"w+");
          }
          if ($encoding == 3)
          {
          fwrite($fp, base64_decode(imap_fetchbody($mbox, $mid, $partstring)));
          }
          else
          {
          fwrite($fp, imap_fetchbody($mbox, $mid, $partstring));
          }
          }
          }
          }
          if ($parts[$i]->parts) {
          $stack[] = array("p" => $parts, "i" => $i);
          $parts = $parts[$i]->parts;
          $i = 0;
          } else {
          $i++;
          }
          }
          }
          }
          ?>

          Kommentar


          • #6
            Warum hast du den Code nochmal gepostet?

            Code:
            115| $i++;
            116| }
            117| } // in Zeile 117 is nix
            118| }
            119| }
            120| ?>
            Reden PHP und du überhaupt von derselben Datei?
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              ich wußte nicht, dass die ganzen leerzeilen mitgezählt werden.
              der fehler soll in dieser zeile sein:

              $attachment[] = array("filename" => $parts[$i]->parameters[0]->value,

              Kommentar


              • #8
                Zitat von sascha_kote Beitrag anzeigen
                ich wußte nicht, dass die ganzen leerzeilen mitgezählt werden.
                Wenn ich in meiner Wohnung nur für die Flächen mit Teppich bezahlen müsste, wäre ich auch glücklicher, ist aber nicht so und ich bin zum Glück auch nie davon ausgegangen.

                Zitat von sascha_kote Beitrag anzeigen
                $attachment[] = array("filename" => $parts[$i]->parameters[0]->value,
                Sieh dir $parts und $parts[$i]->parameters mit print_r an, dann findest du raus, ob es Array oder Objekt ist. Das Ergbnis teilst du uns mit und wir sehen weiter.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  was ist, bitteschön, print_r ?

                  Kommentar


                  • #10
                    PHP: print_r - Manual
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar

                    Lädt...
                    X