Faire une liste des fichiers FTP

Résolu/Fermé
Nenyim Messages postés 72 Date d'inscription mardi 27 octobre 2015 Statut Membre Dernière intervention 23 octobre 2017 - 27 oct. 2015 à 11:33
Nenyim Messages postés 72 Date d'inscription mardi 27 octobre 2015 Statut Membre Dernière intervention 23 octobre 2017 - 29 oct. 2015 à 11:34
Bonjour,

je rencontre actuellement un petit soucis lors de la création d'une liste de fichiers à supprimer sur mon FTP.

Je m'explique.

Il s'agit d'un site comprenant beaucoup d'images de couvertures. Il arrive très souvent que ces couvertures changent par la suite, l'administrateur renvoie donc une nouvelle couverture pour remplacer la précédente, mais cette ancienne image n'est pas supprimée.

Je me retrouve donc avec des centaines d'images doublons dont j'aimerai bien me débarrasser.

Pour se faire, j'ai donc créer une page en php qui compare deux tableaux :
- Le premier va chercher les images contenu dans le dossiers FTP
- Le deuxième fait une liste des images qui sont utilisées dans la bdd

Il compare le tout afin de me sortir une liste des fichiers présent sur le FTP qui ne sont pas appelés par la base de donnée, autrement dit mes doublons donc.
Mon seul soucis, c'est qu'au début la liste est correcte, je peux supprimer sans soucis, mais à un moment, et je ne sais pas lequel, ma liste déconne et me cite des images qui sont appelées dans la base et qui servent donc sur le site. Je n'arrive pas à savoir pourquoi tout d'un coup ça déconne. L'administrateur du site au début renommait ses images sans faire attention, donc avec des espaces par exemple. Est ce que ça peut venir de là et si oui comment je peux m'y prendre pour que ma liste soit correcte ?

Mon but étant, une fois que ma liste est correct, lancer une suppression auto de mes doublons sans devoir le faire une par une (j'ai un peu plus de 1500 images à supprimer :(

Voici mon code générant la liste, des fois que le problème soit dedans.

<?php
$liste_bdd = Array();
$liste_ftp_en_trop = Array($buff);
// Mise en place d'une co basique
$conn_id = ftp_connect("***")or die("erreur de connexion au serveur");
  
// Identification
$login_result = ftp_login($conn_id, id, mdp);
  
// On récupère la liste des fichiers
$buff = ftp_nlist($conn_id, '/web/images/couverture');
  
// Fermeture de la co
ftp_close($conn_id);
 
// Affiche la liste FTP
// var_dump($buff);
 
// BDD
$db = mysqli_connect('localhost','id','mdp') or die ("erreur sql ".mysqli_error());
mysqli_select_db ($db, 'bdd') or die ("erreur sql ".mysqli_error());
 
$sql = 'SELECT couverture_album FROM album';
$res = mysqli_query($db, $sql);
while ($val = mysqli_fetch_array($res))
 {
 $liste_bdd[] = $val['couverture_album'];
 }
 
// Affiche la liste BDD
// var_dump($liste_bdd);
 
// trouver les éléments FTP qui ne sont pas dans la BDD
for($i=0;$i<sizeof($buff);$i++)
 {
 if (!in_array($buff[$i], $liste_bdd))
  {
  $liste_ftp_en_trop[] = $buff[$i];
  }
 }
 
// lister les éléments en trop sur le ftp
for($i=0;$i<sizeof($liste_ftp_en_trop);$i++)
 {
 echo $liste_ftp_en_trop[$i].'<br />';
 }
  
// on ferme la connexion à mysql
mysqli_close();
  
  
?>


L'un de vous aurait il une idée/piste ?

Merci d'avance.

1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 543
27 oct. 2015 à 11:47
Salut,

Ton code semble correct.

Aurais-tu un exemple d'images qui ressort en doublon alors qu'elle est utilisé en bdd ? Il faudrait alors comparer le nom du fichier en bdd et celui retournée par le ftp afin de voir la différence (un espace remplacé par une entité html par exemple ?).

Bonne journée
0
Nenyim Messages postés 72 Date d'inscription mardi 27 octobre 2015 Statut Membre Dernière intervention 23 octobre 2017 27
27 oct. 2015 à 12:34
Malheureusement non ou alors il faudrait que je compare une à une cette liste et une liste de mes fichiers en bdd pour voir ou est le soucis et vu le nombre ça fait pas mal. Je sais juste que ça ne va pas car :
1/ j'ai test de supprimer toutes les entrées de cette liste automatiquement et j'avais des soucis d'image qui n'apparaissaient plus.
2/ J'ai compté le nombre de fichier à supprimer (j'ai fait compter^^) dans cette liste et j'ai comparé avec ce qu'il doit me rester et il me manque environ 800 images que mon script supprime alors qu'il ne faudrait pas :/

Peut être est il possible, avec un LIKE, de reprendre la liste que j'ai faite et de la comparer avec la liste de la bdd pour savoir ou ça commence à planter ?
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 543
27 oct. 2015 à 14:13
Tu dois effectivement pouvoir créer une requête comme ceci pour récupérer la liste des images en bdd correspondant à des doublons :
$query = 'SELECT couverture_album FROM album WHERE couverture_album IN (' . implode("','", $liste_ftp_en_trop) . ')';
0
Nenyim Messages postés 72 Date d'inscription mardi 27 octobre 2015 Statut Membre Dernière intervention 23 octobre 2017 27
Modifié par Nenyim le 27/10/2015 à 15:01
Je l'a met là ?
$sql = 'SELECT couverture_album FROM album';
$res = mysqli_query($db, $sql);
while ($val = mysqli_fetch_array($res))
{
$liste_bdd[] = $val['couverture_album'];
}


Ca me sort la même liste :/
0
Nenyim Messages postés 72 Date d'inscription mardi 27 octobre 2015 Statut Membre Dernière intervention 23 octobre 2017 27
29 oct. 2015 à 11:34
J'ai fini par trouver, merci bien :)
0