[RESOLU] Suppression de fichiers stockés en base SQL (via Mysql)

Eléphanteau du PHP | 38 Messages

24 mai 2019, 17:51

Bonjour,

Petite question technique, dont la réponse est certainement très simple, ou totalement impossible :roll:

J'ai un site web immobilier, les annonces et leurs photos sont hébergées sur un serveur, et référencées dans une base de données Sql.

J'aimerais faire du tri dans les photos, qui commencent à être très nombreuses. J'ai donc créé une requête sur MySql, qui me permet de sortir la liste des photos dont les annonces sont hors ligne depuis X temps. Jusque là tout va bien.

Je sais supprimer le résultat de la requête, mais ça ne supprimera pas les fichiers en lien, sur le serveur. Et le faire manuellement me prendrais des semaines :shock:

Existe t-il une solution pour supprimer les enregistrements Sql ainsi que les fichiers associés ?
Je n'ai rien trouvé sur google ...

Merci de votre aide

Mammouth du PHP | 2703 Messages

24 mai 2019, 18:09

parcourir les résultats de la recherche et appliquer :
https://www.php.net/manual/fr/function.unlink.php

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 mai 2019, 18:34

Non ça n'existe pas directement mais tu peux faire un petit script très simple qui va faire une boucle sur la liste des fichiers à supprimer et le supprimer un par un.
Si tu as du PHP sur le serveur qui héberge les images, tu auras besoin de la fonction unlink() pour supprimer des fichiers

Si tu ne maitrise pas bien le PHP, plutôt que de faire une connexion à ta BDD vu que tu as l'air de gérer le SQL, fait un export dans un fichier texte des fichiers à supprimer, 1 nom de fichier à supprimer par ligne.

Puis ensuite un truc du genre
<?php
foreach(file('liste_des_fichiers_a_supprimer.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $fichier_a_supprimer) {
     if (unlink($fichier_a_supprimer)) {
          echo 'Fichier supprimé : '.$fichier_a_supprimer.'<br />';
     }else{
          echo 'ERREUR : Impossible de supprimer le fichier : '.$fichier_a_supprimer.'<br />';
     }
}
Je te laisse consulter la doc pour comprendre les fonctions que j'ai utilisées ici, bien sûr ce code est a adapté à ton besoin, notamment au niveau du chemin des fichiers à supprimer probablement.

http://php.net/foreach
http://php.net/file
http://php.net/unlink
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 38 Messages

24 mai 2019, 20:04

Merci à tous les 2 pour vos réponses. J'arrive à faire une connexion à ma BDD en PHP, ainsi que la requête, mais je n'ai pas réussi à transposer le résultat dans la fonction unlink.

J'ai donc opté pour la solution avec le fichier .txt

Sans succès, pourtant pour certains fichiers il m'a confirmé la suppression ... et depuis lorsque j'essaie à nouveau il me dit suppression impossible. Comme si le fichier était bien supprimé, alors que je le vois toujours sur mon client FTP.

Eléphanteau du PHP | 38 Messages

24 mai 2019, 20:19

Rectification, la méthode du .txt a bien fonctionné.
Mais décidément mon site veut me compliquer la vie ....

En base sql sont enregistrés mes fichiers sous cette forme XXXXX_ref.jpg ; mais en réalité sur le site plusieurs autres fichiers sont présents et non indexés dans la base.
En fait à la création de l'annonce le fichier photo initial est dupliqué en différentes tailles et je me retrouve avec XXXXX_ref_75x100.jpg, XXXXX_ref_600x800.jpg etc

Puis-je dans mon nom de fichier mettre un truc du genre xxxxx_ref_*.jpg. De sorte qu'il prenne en compte tous les fichiers avec le début du nom indiqué ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 mai 2019, 00:38

Oui c'est possible avec la fonction glob()
http://php.net/glob

Un truc du genre
foreach (glob("xxxxx_ref_*.jpg") as $declinaison_fichier_a_supprimer) {
    unlink($declinaison_fichier_a_supprimer);
}
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 38 Messages

04 juin 2019, 11:32

Bonjour, je n'ai pas réussi à utiliser la fonction glob(), mais j'ai bricolé un truc par le biais de excel.
Merci pour votre aide.
A bientôt