+ Antworten
Ergebnis 1 bis 4 von 4

Thema: php problem - Fatal error: Cannot use object of type stdClass as array

  1. #1
    TP-Newbie sascha_kote macht alles soweit korrekt
    Registriert seit
    May 2010
    Beiträge
    2

    php problem - Fatal error: Cannot use object of type stdClass as array

    hallo,
    ich habe plötzlich eine fehlermeldung bei einem php-script, wobei ich mir eigentlich sicher bin, dass ich nichts geändert hatte.

    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

    fehlermeldung:
    Fatal error: Cannot use object of type stdClass as array in /verzeichnis/photo.php on line 68

    der fehler soll in dieser zeile sein:
    $attachment[] = array("filename" => $parts[$i]->parameters[0]->value,


    hier das ganze script:

    PHP-Code:
    <? 
    /* Konfiguration */ 
    $conf = array(); 
    $conf['host']     = '{imap.domain.de}';     //Accountzugang welches Postfach abgerufen werden soll 
    $conf['username'] = 'photo@domain.de';                    // Zugangsdaten 
    $conf['password'] = 'test';                //Passwort 
    $conf['path']     = './bildverzeichnis';                            //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]->value0, -5) : $basename substr($parts[$i]->parameters[0]->value0, -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($fpbase64_decode(imap_fetchbody($mbox$mid$partstring))); 

    else 

    fwrite($fpimap_fetchbody($mbox$mid$partstring)); 




    if (
    $parts[$i]->parts) { 
    $stack[] = array("p" => $parts"i" => $i); 
    $parts $parts[$i]->parts
    $i 0
    } else { 
    $i++; 




    ?>

  2. #2
    TP-Supporter chorn bringt sich richtig ein Avatar von chorn
    Registriert seit
    Apr 2008
    Ort
    Verden
    Beiträge
    396
    ---

  3. #3
    TP-Newbie sascha_kote macht alles soweit korrekt
    Registriert seit
    May 2010
    Beiträge
    2

    problem gelöst, aber noch ne frage

    das problem war/ist ganz simpel
    mein provider hatte ne neue php version eingestellt.
    darauf muss man erstmal kommen.

    mir ist aber noch was anderes aufgefallen:
    mit dieser zeile werden ja die dateiendungen erlaubt.
    PHP-Code:
    $conf['ext']      = array(".gif",".jpg",".jpeg",".JPG",".JPEG"); 
    das bild wird dann mit fortlaufender nummer abgespeichert, aber:
    schickt jemand ein bild mit der dateieindung .jpg, wird die datei mit foto0001.jpg gespeichert.
    schickt man danach ein bild mit der endung JPG wird diese nicht als foto0002.jpg gespeichert, sondern als foto0001.JPG

    ich glaube, hier wird der neue dateiname gespeichert:
    PHP-Code:
    if (in_array($ext$conf['ext']))
    {
    $ext == '.jpeg' $basename substr($parts[$i]->parameters[0]->value0, -5) : $basename substr($parts[$i]->parameters[0]->value0, -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+");

    kann man das nicht so einstellen, dass automatisch alle bilder mit jpg gespeichert werden?

    lese mich momentan durch diverse php-bücher, habe aber nur den ansatz, mit der $ext.

    Würde mich über ein wenig hifle freuen.
    danke
    sascha

  4. #4
    TP-Supporter chorn bringt sich richtig ein Avatar von chorn
    Registriert seit
    Apr 2008
    Ort
    Verden
    Beiträge
    396
    Du könntest zunächst mal zum testen alle $ext durch 'jpg' (inkl. Anführungsstriche) ersetzen.

+ Antworten

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 30.10.2008, 19:54
  2. Antworten: 6
    Letzter Beitrag: 11.06.2004, 13:34
  3. Fatal error: Call to a member function on a non-object
    Von manuelito im Forum Traum-Dynamik
    Antworten: 4
    Letzter Beitrag: 28.02.2004, 20:30
  4. Fatal Error!
    Von Snaker im Forum Support-Forum
    Antworten: 2
    Letzter Beitrag: 06.11.2003, 11:37
  5. fatal error
    Von webmichl im Forum Support-Forum
    Antworten: 1
    Letzter Beitrag: 07.08.2002, 23:03

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51