Page 1 sur 1

Surveiller des dossiers et envoyer un mail

Posté : 08 oct. 2014, 15:50
par bibos
Bonjour à tous,

Voilà mon problème : J'ai une centaine de dossiers sur un FTP, dans lesquels j'uploade des fichiers en tout genre. Chaque dossier appartient à un utilisateur différent et ses données (mail(s), nom) sont stockés dans une BDD.
Je souhaiterais que lorsque j'uploade des fichiers dans un dossier particulier un mail soit envoyé automatiquement à la personne pour lui dire "Les fichiers suivants ont été ajoutés dans votre dossier".

J'ai trouvé un script (plus bas) qui répond presque à mes attentes... SAUF QUE, il envoie un mail pour CHAQUE fichier uploadé. Donc si j'uploade 5 fichiers dans le même dossier, il envoie 5 mails... Et je préfererais évidemment que les utilisateurs ne reçoivent qu'un seul mail groupé...

...Mais je ne sais pas comment faire 8-)

Le fonctionnement de mon script actuel : Il checke de manière récursive mon dossier racine, puis ses sous-dossiers, puis les fichiers, et stocke leur date de modification dans un fichier texte. Si la dernière date de modification est inférieur à la nouvelle date, il envoie un mail pour prévenir.

Je suis preneur de toute aide, merci d'avance !
<?
// On lit la dernière exécution du script
$fp = fopen ("scriptexec.txt", "r");
$last_exe = fgets ($fp, 50);
fclose ($fp);
				
// Fonction de scan des dossiers et sous-dossieers
function ScanDirectory($Directory,$last_exe="",$parent=""){

 		$url_ftp="MON_URL";
		$email_envoi="info@MON_MAIL.fr";
		$nom_envoi="MON_NOM";
		
		$headers ="From: <".$email_envoi.">".$nom_envoi."\n"; 
		$headers .="Reply-To: ".$email_envoi."\n"; 
		$headers .="MIME-version: 1.0\n";
		$headers .="Content-Type: text/html; charset=utf-8\n"; 
		$headers .="Content-Transfer-Encoding: 8bit"; 
		$objet="Un nouveau fichier a été ajouté dans votre dossier";
		

  $MyDirectory = opendir($Directory) or die('Erreur');
	while($Entry = @readdir($MyDirectory)) {
		
        // On checke le dossier parent, et on relance le script pour les fichiers
		if(is_dir($Directory.'/'.$Entry)&& $Entry != '.' && $Entry != '..') {
			ScanDirectory($Directory.'/'.$Entry,$last_exe,$Entry);
		}
		
		// On checke les fichiers
		elseif ($Entry!="." && $Entry!=".." && $Entry!="index.php" && $Entry!="check.php") {
				$date=filemtime($Directory.'/'.$Entry);
				$size=filesize($Directory.'/'.$Entry);
				// Conversion en Go, Mo, Ko
				if ($size >= 1073741824)
				{ $size = round($size / 1073741824 * 100) / 100 . " Go"; }
				elseif ($size >= 1048576)
				{ $size = round($size / 1048576 * 100) / 100 . " Mo"; }
				elseif ($size >= 1024)
				{ $size = round($size / 1024 * 100) / 100 . " Ko"; }
				else
				{ $size = $size . " o"; }
				
				// Si le fichier est plus récent que la dernière date d'exécution du script
				if ($date>$last_exe) {
					
					// On récupère le mail dans la BDD
					require_once ("../scripts/connexion.php");
					$query_client="SELECT email1 FROM dossiers WHERE numero=$parent";
					$exe_client=mysql_query($query_client);
					while ($tab_client = mysql_fetch_array($exe_client)) {	
						$mail=$tab_client['email1']; }
					
					// On crée le message
					$message="<p>Le fichier suivant a été ajouté dans votre dossier :</p>";
					$message.="<ul><li>".$Entry." - ".$size."</li></ul>";
					$message.="<p>Vous pouvez y accéder avec votre login/mot de passe depuis cette URL : <a target='_blank' href='".$url_ftp.$parent."'>".$url_ftp.$parent."</a></p>";

					// On envoie le mail d'avertissement
					if ($mail) { if(mail($mail,$objet,$message,$headers)) echo "MAIL ENVOYE<br>"; }
					echo "<br>Mail :".$mail;
					echo "<br>Objet :".$objet;
					echo "<br>Message :".$message;
					echo "<br>Parent :".$parent;
					echo "<br>Headers :".$headers;
					
				}
				
       }
	}
  closedir($MyDirectory);
}

// On lance la fonction avec l'URL absolue du dossier parent
ScanDirectory('/home/www/ftp/',$last_exe);

// On écrit l'heure d'exécution du script dans un fichier pour comparaison lors de la prochaine fois
$fp = fopen ("scriptexec.txt", "r+");
fseek ($fp, 0);
fputs ($fp, time());
fclose ($fp);

?>

Re: Surveiller des dossiers et envoyer un mail

Posté : 09 oct. 2014, 01:23
par Nestecha
Quand tu dis 'automatiquement' est-ce que cela signifie que lorsque tu upload tes fichiers par le FTP, sans avoir ouvert la page dont tu as inscrit le code ci-dessous dans un navigateur, l'utilisateur reçoit un fichier ? Ou bien l'envoi se passe par cette page là ? Ou une page qui appellera cette page là de toute façon, toujours dans un navigateur ?

Ou derniere possibilité, tu upload les fichiers sur un FTP sans passer par un navigateur, puis en ouvrant cette page il détecte les nouveaux fichiers uploadés et fait l'envoi de tous les mails d'un coup ?

Avec ces précisions ce sera plus simple de t'aider :)