web-dev-qa-db-fra.com

Comment obtenir la liste de tous les fichiers image orphelins?

J'aimerais créer la liste des images qui ne sont plus utilisées dans aucun élément de contenu afin qu'elles puissent être purgées du disque. Quelle est la meilleure méthode pour générer une telle liste?

8
miroxlav

Je ne suis pas sûr qu'il existe une meilleure méthode pour y parvenir. La seule façon dont je peux penser nécessite un peu d'effort. En d’autres termes, générer une liste de toutes les images de la table de contenu dans la base de données (et éventuellement dans des modules, des menus, des bannières, etc.), quel que soit le lieu où les images sont référencées, ce qui est beaucoup, comparez cette liste à toutes les images. sur le système de fichiers, puis comparer entre chaque liste et supprimer les images qui ne sont pas utilisées.

Donc, cela ressemblerait à:

1) Obtenez une liste de toutes les images dans la table de base de données de com_content. Vide toutes les lignes, regex pour <img src="images/stories/an-image.jpg" />. Une autre méthode consiste à utiliser la méthode strip_tags () de php et à n'autoriser que la balise. Je trouve cela plus facile que d'écrire un regex en général. Généralement, exécutez un script php pour construire cette liste en tant que document texte ou csv.

2) Obtenez une liste de toutes les images sur le site. Vous pouvez utiliser grep depuis la ligne de commande pour le faire, je crois. Vous pourriez probablement le faire avec une sorte de méthode de système de fichiers php récursive.

3) insérez les deux dans une feuille de calcul et effectuez une sorte de comparaison avec chaque colonne pour voir si l'image est utilisée, en compilant une liste des images inutilisées dans une troisième colonne.

-

Personnellement, à moins d’avoir une tonne d’images, je ne suis pas sûr que cela en vaille la peine. Mais vous devrez déterminer cela en attendant votre cas d'utilisation. Il peut également y avoir une solution beaucoup plus simple que quelqu'un d'autre devra suggérer!

5
Chad Windnagle

Si vous avez vos journaux d’accès, vous pourrez peut-être extraire tous les fichiers d’image demandés au cours des X derniers mois (vous devrez jouer avec toutes ces données). Ils sont donc très probablement utilisés sur votre site actuel (mais pas à 100%). En fonction de votre contenu et de la structure de votre site et si votre site n’est pas vraiment énorme (c’est-à-dire 1 million d’articles), il est très probable que les autres ne sont probablement pas utilisés (encore une fois, pas à 100%).

Je trouve cette solution aussi simple. Sauvegardez les images avant de les supprimer. Vous pouvez suivre ultérieurement 404 erreurs en essayant d'ouvrir des fichiers spécifiques et vous pouvez décider de les restaurer.

C'est une solution sale, mais il n'y a vraiment pas de moyen facile. La meilleure option serait de suivre les conseils du Tchad et d'écrire votre propre analyseur.

3
Ivo

Je ne suis pas au courant d'une extension existante qui le ferait. Votre meilleur choix serait d'écrire un script qui compare chaque image aux tables de la base de données où le contenu peut être stocké pour voir si elles sont utilisées.

3
Michael

Même s'il n'existait aucune extension lorsque la question a été posée, à partir d'août 2018, il en existe au moins deux qui peuvent apparemment trouver et supprimer des images orphelines:

VX orphanImages (extension payante)

"Le plug-in VX orphanImages analyse votre dossier d'images de site Joomla! Pour rechercher des éléments qui ne sont utilisés dans aucun contenu du site. Il utilise le composant principal Media pour marquer les images orphelines dans la liste, afin que vous puissiez décider de les conserver ou de les supprimer. "

ImageManager (versions gratuite/payante)

"ImageManager for Joomla! Vous permet de déplacer et de renommer des images sans perdre le lien-image dans les articles et les modules HTML personnalisés. Il vous suffit de faire glisser et de déposer vos images pour restructurer et nettoyer votre site Web. Il peut également répertorier toutes les images inutilisées et les supprimer. . "

0
Neil Robertson