Ich bin ein wenig Verlust, habe ich 2 Skripte 1, die E-Mail-Anhänge aus einem Postfach und eine zweite, die dann die Anhänge analysiert und fügt sie in die DB.Datei schreiben Konflikte: file_get_contents() & fputs()
Dies funktioniert die meiste Zeit gut, wirft aber immer wieder ein paar Probleme auf. Manchmal wird der E-Mail-Anhang erstellt, aber nicht ausgefüllt (leere Datei mit Ausnahme des Namens) und manchmal wird er überhaupt nicht erstellt (heruntergeladen).
Das erste Skript öffnet eine neue Datei und schreibt darauf, das zweite Skript greift dann auf den Inhalt dieser Datei zu. Könnten diese Probleme auftreten, weil die Datei immer noch geöffnet ist, wenn das zweite Skript versucht, darauf zuzugreifen?
Sie laufen alternativ alle 15 Sekunden.
erster Skript (es ist ziemlich groß, so habe ich versucht, nur die Teile in Frage zu zeigen)
for ($jk = 1; $jk <= imap_num_msg($mbox); $jk++) {
echo "~~~~~~~~~~~~~~BEGIN!~~~~~~~~~~~~~~~~~~\n";
echo imap_num_msg($mbox);
$structure = imap_fetchstructure($mbox,$jk); echo "imap_fetchstructure()\n";
$parts = $structure->parts; echo "structure->parts\n";
$fpos=2;
for($i = 1; $i < count($parts); $i++) { echo "loop through parts of email\n";
$message["pid"][$i] = ($i);
$part = $parts[$i];
if($part->disposition == "ATTACHMENT") { echo "if ATTACHMENT exists then grab data from it\n";
$message["type"][$i] = $message["attachment"]["type"][$part->type] . "/" . strtolower($part->subtype);
$message["subtype"][$i] = strtolower($part->subtype);
$ext=$part->subtype;
$params = $part->dparameters;
$filename=$part->dparameters[0]->value;
$num = $this->append();
$newFilename = $this->addToDB($filename,$num);
echo $newFilename."- Added tp DB\n";
$mege="";
$data="";
$mege = imap_fetchbody($mbox,$jk,$fpos);
$filename="$newFilename";
$fp=fopen($savedirpath.$filename,w); echo "Create file at specified location\n";
$data=$this->getdecodevalue($mege,$part->type);
fputs($fp,$data); echo "Write data to the file\n";
echo ">>>>>>>>>>>>> File ".$savedirpath.$newFilename." ~ now exists!\n";
fclose($fp);
$fpos+=1;
imap_mail_move($mbox,'1:1','Processed');
echo "****************************************************\n";
echo "* Matched - Download and move to Processed folder. *\n";
echo "****************************************************\n";
echo "\n\n\n";
}
}
}
}else{
imap_mail_move($mbox,'1:1','Other');
echo "***************************************************\n";
echo "******** No Match - Move to Other folder **********\n";
echo "***************************************************\n";
}
imap_close($mbox);
}
Das zweite Skript macht eine Reihe von Parsen von Dateinamen nehmen im ersten Skript zu dem db hinzugefügt, dann klebte sie in das Folgende.