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
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);
?>