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
Please also mark the comments that contributed to the solution of the article
Content-Key: 546353
Url: https://administrator.de/contentid/546353
Printed on: April 25, 2024 at 10:04 o'clock
5 Comments
Latest comment
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