php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 3 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 30-04-2010, 18:27
sascha_kote
 Registrierter Benutzer
Links : Onlinestatus : sascha_kote ist offline
Registriert seit: Apr 2010
Beiträge: 4
sascha_kote befindet sich auf einem aufstrebenden Ast
Standard 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]->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++;
}
}
}
}
?>
 
 
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]->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++;
}
}
}
}
?>

Geändert von sascha_kote (30-04-2010 um 20:02 Uhr) Grund: sorry
Mit Zitat antworten
  #2 (permalink)  
Alt 30-04-2010, 18:38
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #3 (permalink)  
Alt 30-04-2010, 21:23
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

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
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (30-04-2010 um 21:31 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 30-04-2010, 21:28
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

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:
Zitat:
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
Mit Zitat antworten
  #5 (permalink)  
Alt 30-04-2010, 21:40
sascha_kote
 Registrierter Benutzer
Links : Onlinestatus : sascha_kote ist offline
Registriert seit: Apr 2010
Beiträge: 4
sascha_kote befindet sich auf einem aufstrebenden Ast
Standard

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]->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++;
}
}
}
}
?>
Mit Zitat antworten
  #6 (permalink)  
Alt 30-04-2010, 21:50
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

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?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 30-04-2010, 23:01
sascha_kote
 Registrierter Benutzer
Links : Onlinestatus : sascha_kote ist offline
Registriert seit: Apr 2010
Beiträge: 4
sascha_kote befindet sich auf einem aufstrebenden Ast
Standard

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,
Mit Zitat antworten
  #8 (permalink)  
Alt 30-04-2010, 23:30
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
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:
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.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 01-05-2010, 10:24
sascha_kote
 Registrierter Benutzer
Links : Onlinestatus : sascha_kote ist offline
Registriert seit: Apr 2010
Beiträge: 4
sascha_kote befindet sich auf einem aufstrebenden Ast
Standard

was ist, bitteschön, print_r ?
Mit Zitat antworten
  #10 (permalink)  
Alt 01-05-2010, 10:26
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

PHP: print_r - Manual
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fatal error: Call to a member function fetch_array() on a non-object fringis PHP Developer Forum 11 27-05-2007 22:55
Problem mit: Cannot use object of type X as array Sandmancw PHP Developer Forum 15 13-02-2007 20:14
stdClass Object auslesen RealFairPlayer PHP Developer Forum 4 01-02-2007 16:15
fatal error non-object petro_0 PHP Developer Forum 30 10-07-2006 16:18
Fatal error: Call to a member function on a non-object ... Bartleby PHP Developer Forum 9 01-03-2005 15:12

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:21 Uhr.