Hallihallo,
ich mal wieder. Bei der Verwendung der IMAP FUnktionen unter PHP
gibt es einen seit längerem bekannten Bug.. Ist die Anzahl der Nachrichten im Postfach kleiner als 1 wird
ausgespuckt.
Das seltsame bei mir ist jetzt aber, dass sich eine Mail im entsprechenden Ordner befindet, ich dennoch diese Fehlermeldung erhalte...
Imgroßen und ganzen soll das ding einfach nur eine Mail nach Betreff öffnen, den Anhang (eine CSV Datei) laden und in eine Datenbank schmeissen.
Hier mein komplettes Script(mit einigen unrelevanten Kürzungen):
Bis vor kurzem ging noch alles, jetzt mit einigen Änderungen (Die If-Bedingungen für die Konvertierung Monat/Woche wurdne hinzugefügt) will es nicht mehr.
ich mal wieder. Bei der Verwendung der IMAP FUnktionen unter PHP
gibt es einen seit längerem bekannten Bug.. Ist die Anzahl der Nachrichten im Postfach kleiner als 1 wird
Code:
Notice: Unknown: Sequence out of range (errflg=2) in Unknown on line 0
Das seltsame bei mir ist jetzt aber, dass sich eine Mail im entsprechenden Ordner befindet, ich dennoch diese Fehlermeldung erhalte...
Imgroßen und ganzen soll das ding einfach nur eine Mail nach Betreff öffnen, den Anhang (eine CSV Datei) laden und in eine Datenbank schmeissen.
Hier mein komplettes Script(mit einigen unrelevanten Kürzungen):
PHP-Code:
<?php
$db_host = "ip"; // IP des DatenbankHosts
$db_user = "user"; // User der Datenbank
$db_pass = "pw"; // Passwort des Users
$datab = "db"; // Datenbankname
$table = "table1"; // Tabellenname
$table2 = "table2"; // Tabellenname 2
$db = mysql_connect($db_host,$db_user,$db_pass) or die(mysql_error()); // Zur DB Verbinden
$email_ordner = "{domain.de{variablen}/ordner/unterordner"; // Mailer
$email = "mail"; //Email bzw User
$email_pass = "mail_pass"; //Passwort der Mail
set_time_limit(6000);
function k2p($k2p) {
return str_replace(',', '.', $k2p);
}
function p2n($p2n) {
return str_replace('.', '', $p2n);
}
function p2b($p2b) {
return str_replace('.', '-', $p2b);
}
function hdf($hdf) {
return str_replace('=', '', $hdf);
}
function get_monday_of_week($kw,$year = false) {
if ($year == false) $year = date("Y");
if ($kw < 0 || $kw > 53) return false;
$dayofweek = (intval(date("w",mktime(0,0,0,1,1,$year))) == 0) ? 7 : intval(date("w",mktime(0,0,0,1,1,$year)));
$dayofyear = 7*($kw-2)+(9-$dayofweek);
$days = 0;
$i = 1;
while (true) {
if ($days+date('t',mktime(0,0,0,$i,1,$year)) < $dayofyear) $days += date('t',mktime(0,0,0,$i++,1,$year));
else return $datum = (($dayofyear-$days < 1) ? 1 : ($dayofyear-$days)).".".($i).".$year";
}
}
error_reporting(E_ALL);
$logfile_uu = "C:\\apachefriends\\xampp\\htdocs\\tool\\log\\log2_".date('Y-m-d_G-i').".log";
$logfile_uu2 = "C:\\apachefriends\\xampp\\htdocs\\tool\\log\\log2_".date('Y-m-d_G-i').".log";
//mail holen
$mbox = imap_open ($email_ordner,$email,$email_pass)or die('Cannot connect to Mailserver: ' .imap_last_error());
$MC = imap_check($mbox);
if ($MC->Nmsgs == 0) { imap_close($mbox); }
$result = imap_fetch_overview($mbox,"2:{$MC->Nmsgs}",0);
foreach ($result as $overview)
{
$struct = imap_fetchstructure($mbox,$overview->uid,FT_UID);
$msg = preg_replace("/=(\r?)\n/", '', imap_fetchbody($mbox , $overview->msgno,2));
//$msg = imap_fetchbody($mbox , $overview->msgno,2);
//heutige datum generieren, um es später in die db einzutragen
$date = date("Y-m-d");
if($overview->subject == 'Test_1')
{
//zeugs in datenbank schreiben
$csv = explode("\n",str_replace('"','', $msg));
foreach ($csv as $line)
{
if ($fields[0] == "Webseite")
$ok = true;
$fields = explode (';', $line);
if($ok)
{
//festlegung was in welche spalte kommt
$website = trim($fields[0]);
$date_art = "test";
$weeke = strpos($fields[0], "W");
$monte = strpos($fields[0], "M");
if ($weeke == 5 && $monte != 5)
{
$ex = explode("-", $fields[1]);
$test = explode("W", $ex[1]);
$woche = $test[1];
$j = $ex[0];
$kw = $woche;
$date2 = get_monday_of_week($kw,$j);
$date_art = "weekly";
}
else if ($monte == 5 && $weeke != 5)
{
$ex = explode("-", $fields[1]);
$test = explode("M", $ex[1]);
$month = $test[1];
$date2 = "01.".$month.".".$ex[0];
$date_art = "monthly";
}
else
{
$date2 = p2b($fields[1]);
$date_art = "daylie";
}
$impressions = p2n($fields[2]);
$views = p2n($fields[3]);
$unique_users = p2n($fields[4]);
$impr_per_uu = p2n($fields[5]);
$views_per_uu = p2n($fields[6]);
$clicks = p2n($fields[7]);
$k_rate_prozent = k2p($fields[8]);
$view_k_rate_prozent = k2p($fields[9]);
$uu_k_rate = k2p($fields[10]);
$qs2 = "INSERT IGNORE INTO ".$datab.".".$table2." (`webseite`, `date`, `impressions`, `views`, `unique_users`, `impr_per_uu`, `views_per_uu`, `clicks`, `k_rate_prozent`, `view_k_rate_prozent`, `uu_k_rate`, `insert_date`, `date_art`) VALUES ('".$website."', '".$date2."', '".$impressions."', '".$views."', '".$unique_users."', '".$impr_per_uu."', '".$views_per_uu."', '".$clicks."', '".$k_rate_prozent."', '".$view_k_rate_prozent."', '".$uu_k_rate."', '".$date."', '".$date_art."');";
$qs3 = hdf(trim($qs2)); //gleichzeichen löschen mit der oben definierten funktion "hdf"
$qs4 = str_replace(array("\n","\r","\n\r"),"",$qs3); //absätze löschen
mysql_query($qs4) or file_put_contents($logfile_uu, mysql_error().$qs4."\n", FILE_APPEND | LOCK_EX);;
file_put_contents($logfile_uu2, $qs4."\n", FILE_APPEND | LOCK_EX);;
imap_mail_move($mbox,$overview->msgno,'ordner/unterordner/done');
imap_expunge($mbox);
}
}
}
else if($overview->subject == 'Test_2)
{
print_r("nope.");
}
}
imap_close($mbox);
?>
Kommentar