Php Mailer und foreach bricht ab
Hallo,
ich habe ein Backup Script programmiert. Damit ich nun nicht für jede Datenbank einen Cron Job anlegen muss, habe ich ein Array gebaut und durchlaufe das mit foreach.
Zusätzlich, möchte ich, falls der Provider mal Mist baut oder ein Fehler erst nach einigen Wochen bemerkt wird, die DB per Email verschicken. Dazu nutze ich php Mailer.
Leider nimmt er nur die erste Schleife. Was ich gelesen habe, ist, dass php mailer Probleme macht.
Aktuell habe ich die eigendliche Send-Funktion außerhalb der foreach-Schleife. Funktioniert in sofern, als dass ich die Email bekomme, allerdings mit allen DBs im Anhang. Schöner wäre 1 Email 1 Anhang/Datenbank.
Was muss ich ändern?
Vielen Dank für Tipps
tsunami
ich habe ein Backup Script programmiert. Damit ich nun nicht für jede Datenbank einen Cron Job anlegen muss, habe ich ein Array gebaut und durchlaufe das mit foreach.
Zusätzlich, möchte ich, falls der Provider mal Mist baut oder ein Fehler erst nach einigen Wochen bemerkt wird, die DB per Email verschicken. Dazu nutze ich php Mailer.
Leider nimmt er nur die erste Schleife. Was ich gelesen habe, ist, dass php mailer Probleme macht.
Aktuell habe ich die eigendliche Send-Funktion außerhalb der foreach-Schleife. Funktioniert in sofern, als dass ich die Email bekomme, allerdings mit allen DBs im Anhang. Schöner wäre 1 Email 1 Anhang/Datenbank.
Was muss ich ändern?
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';
$email = new PHPMailer();
$email->SetFrom('backup-service@papalangstrumpf.biz', 'Backup Service'); //Name is optional
//*****DB Array ***************
$datenbank_array ["db_name"] ="hugo";
$datenbank_array ["db_passwd"] ="12345";
$datenbank_array ["db_pfad"] ="backup/";
$datenbank_array ["firmennamex"] ="Firma Mustermann";
$datenbank_array[1] ["db_name"] ="anton";
$datenbank_array[1] ["db_passwd"] ="54321";
$datenbank_array[1] ["db_pfad"] ="../tralala/backup/";
$datenbank_array[1] ["firmennamex"] ="Firma Holzwurm";
$x=0;
// echo $datenbank_array[1] ["firmennamex"];
foreach ($datenbank_array as $hilfsarray){
// echo "x".$x;
foreach ($hilfsarray as $key => $value) {
$$key =$value;
// echo $$key."<br>";
}
echo $db_name." - ".$db_passwd." - ".$db_pfad." - ".$firmennamex."<br>";
$sql_file = $db_pfad."dump_".str_replace(' ','',$firmennamex)."_". $db_name . "_" . date('Ymd_Hi').".sql";
// echo "<br>peep".$sql_file;
$dateiname="dump_".str_replace(' ','',$firmennamex)."_". $db_name . "_" . date('Ymd_Hi').".sql";
$dateiname = $dateiname . ".gz";
// ************Backup bereinigen Älter als 3 Monate löschen*************
$dreimonate = mktime(0, 0, 0, date("m")-3, date("d"), date("Y"));
// echo date("d.m.y", $dreimonate);
$suchmuster="dump_".$db_name."_".date('Ym',$dreimonate)."*";
// echo "peep".$db_passwd;
array_map('unlink', glob($db_pfad.$suchmuster));
// *******************Dumb erstellen ******************************
// echo "Ausgabe: mysqldump -u $db_name -p'$db_passwd' --allow-keywords --add-drop-table --complete-insert --quote-names $db_name > $sql_file";
exec("mysqldump -u $db_name -p'$db_passwd' --allow-keywords --add-drop-table --complete-insert --quote-names $db_name > $sql_file");
// echo "<br><br>Vorlage: mysqldump -u $db_name -p'$db_passwd' --allow-keywords --add-drop-table --complete-insert --quote-names $db_name > $sql_file";
exec("gzip $sql_file");
$datei = $sql_file.".gz";
$link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$link = str_replace(basename(__FILE__),$datei,$link);
//*************** Mailen***************************
$email->Subject = 'Backup Buf-O '.$firmennamex.' vom '.date("d.m.Y");
$email->Body = "Sehr geehrte Damen und Herren, \nanbei das Backup vom ".date("d.m.Y")." der Firma ".$firmennamex.".\nZusätzlich wird die Datenbank im Rechenzentrum gespeichert. \nBitte behandeln Sie die Daten vertraulich!
\n\nMit freundlichem Gruß\n\n
--
Max Mustermann
$email->AddAddress( 'peter@pan.de' );
$file_to_attach = $db_pfad.$dateiname;
// echo $file_to_attach."<br><br>";
$email->AddAttachment( $file_to_attach , $dateiname );
$x++ ;
} return $email->Send();
?>
Vielen Dank für Tipps
tsunami
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 546353
Url: https://administrator.de/forum/php-mailer-und-foreach-bricht-ab-546353.html
Ausgedruckt am: 04.04.2025 um 17:04 Uhr
5 Kommentare
Neuester Kommentar
Du übergibst das Attachment dem "$email"-Objekt und das merkt sich das und resettet nicht nach dem Senden automatisch. Das musst du am Ende der Schleife auch mit unset behandeln. Also am Beginn jeder schleife $email = new PHPMailer(); und die Dinge wie $email->SetFrom('backup-service@papalangstrumpf.biz', 'Backup Service');
und am Ende unset($email);
Grüße
bloody
und am Ende unset($email);
Grüße
bloody