<?php
////////////////////A personnaliser !!!/////////////////////
$destinataire = "laurent.nogues@laposte.net, lnogues68@gmail.com";
///////////////////////////////////////////////////////////

	// Données de connexion à la base de données
	$log="DEBUT<br/>";
	// On spécifie le chemin absolu où le script stockera les sorties .gz et .html
	$path = 'svgde/';

	// on supprime les fichiers vieux de plus de 3 jours
	
	$folder = new DirectoryIterator($path);  // récupère l'nsemble des fichiers dans $path
	foreach($folder as $file)
	{
		// si l'entrée est un fichier normal  et si l'entrée n'est pas . ou ..  et si la date du fichier a plus de 3 jours (en seconde 1 j = 86400 sec))
		if($file->isFile() && !$file->isDot() && (time() - $file->getMTime() > 259200))
		{	// supprime - unlink- le fichier
			unlink($file->getPathname());
			$log.="le fichier $file->getPathname() a éte supprimé<br/>";
		}
	}
	
	
	//connexction à la bdd
	require ('connect/mysqli_connect.php'); // Connect to the db.
	$log.="Connexion à la BDD MySQL $Hote \ $Nom_bdd effectuée <br/>";

	// La variable $return contiendra le script de sauvegarde.
	 // On englobe le script de backup dans une transaction
	 // et on désactive les contraintes de clés étrangères
	$return = '--
	-- Hôte : ' . $Hote . '
	-- Date et heure : ' . date('d/m/Y à H:i:s') . '
	-- Base de données : `' . $Nom_bdd . '`
	--
	SET FOREIGN_KEY_CHECKS=0;
	SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
	SET AUTOCOMMIT=0;
	START TRANSACTION;
	';
	// on récupère le nom des tables 
	 $nomtables = array();
	 $q='SHOW TABLES';
	$result = mysqli_query($dbcon,$q);	
		while($row = mysqli_fetch_row($result))
		{
			$nomtables[] = $row[0];

		}
	//construction du script
	foreach($nomtables as $table)
	{	
		
		$return.= "DROP TABLE IF EXISTS $table ;".PHP_EOL; //SUPPRIME TABLE EXISTANTE // .= concaténation
		$q='SHOW CREATE TABLE '.$table;
		$result = mysqli_query($dbcon,$q);
		
		$row2 = mysqli_fetch_row($result); //Récupère une ligne de données 
		$return.= "\n\n".$row2[1].";\n\n"; // /n = saut de ligne
		
		
		$q1='SELECT * FROM '. $table.';';
		$result1 = mysqli_query($dbcon,$q1);
		$num_fields = mysqli_num_fields($result1);
		
		for ($i = 0; $i < $num_fields; $i++) 
		{
			while($row = mysqli_fetch_row($result1))
			{
				$return.= "INSERT INTO $table VALUES(";
				for($j=0; $j<$num_fields; $j++) 
				{
					$row[$j] = addslashes($row[$j]); // ajoute des \ pour '
					$row[$j] =preg_replace("/\n/","\\n",$row[$j]);
					if (isset($row[$j]))
					{ 
						$return.= '"'.$row[$j].'"' ; 
					}
					else 
					{
						$return.= '""';
					}
					if ($j<($num_fields-1))
					{ 
						$return.= ',';
					}
				}
				$return.= ");\n";
			}
		}
		$return.="\n\n\n";		
	}
	// On valide la transaction
	// et on résactive les contraintes de clés étrangères
	$return .= 'SET FOREIGN_KEY_CHECKS=1;
	COMMIT;';

// On enregistre maintenant le script SQL dans un fichier compressé
	$savedFile = 'BKP-' . date('d-m-Y_H-i-s').'-'.$Nom_bdd.'.sql.gz';
	$gz = gzopen($path . $savedFile, 'w9');
	gzwrite($gz, $return);
	gzclose($gz);
	


	//----------------------------------
	// Construction de l'entête
	//----------------------------------
	// On choisit généralement de construire une frontière générée aléatoirement
	// comme suit. (le document pourra ainsi etre attache dans un autre mail
	// dans le cas d'un transfert par exemple)
	
	$boundary = "-----=".md5(uniqid(rand()));

	// Ici, on construit un entête contenant les informations
	// minimales requises.
	// Version du format MIME utilisé
	
	$header = "MIME-Version: 1.0\r\n";
	
	// Type de contenu. Ici plusieurs parties de type different "multipart/mixed"
	// Avec un frontière définie par $boundary
	
	$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
	$header .= "\r\n";

////////////////////////////////////////////////////////////////////////////////////	
//	MAIL
	//--------------------------------------------------
	// Construction du message proprement dit
	//--------------------------------------------------

	// Pour le cas, où le logiciel de mail du destinataire
	// n'est pas capable de lire le format MIME de cette version
	// Il est de bon ton de l'en informer
	// REM: Ce message n'apparaît pas pour les logiciels sachant lire ce format
	
	$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";

	//---------------------------------
	// 1ère partie du message
	// Le texte
	//---------------------------------
	// Chaque partie du message est séparée par une frontière
	$msg .= "--$boundary\r\n";

	// Et pour chaque partie on en indique le type
	$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
	// Et comment il sera codé
	$msg .= "Content-Transfer-Encoding:8bit\r\n";
	// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
	$msg .= "\r\n";
	// Enfin, on peut écrire le texte de la 1ère partie
	$msg .= "Ceci est un mail avec un fichier joint\r\n";
	$msg .= "\r\n";

	//---------------------------------
	// 2nde partie du message
	// Le fichier
	//---------------------------------
	// Tout d'abord lire le contenu du fichier
	$file = $path . $savedFile;
	$fp = fopen($file, "rb");   // b c'est pour les windowsiens
	$attachment = fread($fp, filesize($file));
	fclose($fp);

	// puis convertir le contenu du fichier en une chaîne de caractères
	// certe totalement illisible mais sans caractères exotiques
	// et avec des retours à la ligne tout les 76 caractères
	// pour être conforme au format RFC 2045
	$attachment = chunk_split(base64_encode($attachment));

	// Ne pas oublier que chaque partie du message est séparée par une frontière
	$msg .= "--$boundary\r\n";
	// Et pour chaque partie on en indique le type
	$msg .= "Content-Type: application/x-gzip; name=\"$file\"\r\n";
	// Et comment il sera codé
	$msg .= "Content-Transfer-Encoding: base64\r\n";
	// Petit plus pour les fichiers joints
	// Il est possible de demander à ce que le fichier
	// soit si possible affiché dans le corps du mail
//	$msg .= "Content-Disposition: inline; filename=\"$file\"\r\n";
	// Il est indispensable d'introduire une ligne vide entre l'entête et le texte
	$msg .= "\r\n";
	// C'est ici que l'on insère le code du fichier lu
	$msg .= $attachment . "\r\n";
	$msg .= "\r\n\r\n";

	// voilà, on indique la fin par une nouvelle frontière
	$msg .= "--$boundary--\r\n";

	
	$expediteur   = "admin@passpro";
	$reponse      = $expediteur;

	$ok=mail($destinataire, "Svgde Bdd Passpro", $msg,"Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
	echo $ok?"<h1> Mail envoyé avec succés</h1>":"<h1> L'envoi du mail a échoué</h1>";
?>