Dernières nouvelles

Trouver les fichiers orphelins sur son site

<<< Find unused and used content files in your Joomla website >>>

Deux fichiers .txt sont créés par le script, un listant les images et autres fichiers repris dans la base de données, l'autre avec ceux qui ne sont pas repris dans la base de données.

Attention cependant, si on affiche des galeries sur base d'un nom de dossier sans mentionner les noms de fichier (par exemple parce qu'on utilise {gallery}MON_DOSSIER{/gallery} dans ses articles ou modules), on aura dans ce cas des "faux négatifs" : ces images ne sont en effet pas nommément reprises dans la base de données mais sont bien utilisées.
Idem pour des images qui seraient mentionnées dans le CSS, par exemple d'un template.

Bref, par prudence on conseillera de DEPLACER (et non de SUPPRIMER directement) les images et fichiers "a priori non utilisés".
Ensuite, après vérification sur le site (ou avec des outils qui font ces contrôles), on pourra effectivement les effacer.


<< sources >>

Voir les scripts suivants :
https://gist.github.com/renekreijveld/27d9062b941a2d0c80f3
https://gist.github.com/renekreijveld/9663741


<< adaptation du script pour pouvoir exécuter le script shell depuis un navigateur >>

On n'a pas toujours accès à la ligne de commande chez son hébergeur.
Si c'est le cas, on peut contourner ce problème en autorisant l'exécution de scripts via un navigateur.

Testé chez SiteGround *et* chez OVH : ça fonctionne parfaitement chez les deux.
Procédure strictement identique expliquée ci-dessous

L'explication pour exécuter un script shell depuis un navigateur se trouve ici (détaillé dans l'explication ci-dessous) :
https://www.siteground.com/kb/how_to_run_simple_shell_scripts_directly_from_a_browser/

Par contre, il faut rajouter les deux lignes suivantes au début du fichier "sh" pour que le script original fonctionne bien depuis un Navigateur, sinon erreur 500 !
(NB: même la 2e ligne echo "", alors qu'elle donnerait l'impression d'être inutile... Précisément lié au fait qu'on ne l'exécute pas en ligne de commande mais depuis le navigateur...)

echo "Content-type: text/html"
echo ""

<< explications >>

Les fichiers uploadés doivent impérativement s'appeler comme suit (le premier avec .sh sinon il s'affiche au lieu de s'exécuter, le second sans sh car il est appelé comme cela dans le 1er)
jfindfiles.sh
jfunctions

1. On les uploade à la racine du Joomla

2. On les "chmod" en 755 (via FTP p ex) !

3. Il faut ajouter les deux lignes suivantes le htaccess comme indiqué ci-dessous

Options ExecCGI
AddHandler cgi-script .sh
# plus don't forget to disable rules 148 to be able to execute the script

4. Si on utilise aeSecure, il faut désactiver la règle 148 de aeSecure en ajoutant un # au début de sa ligne "rewrite"
(NB : c'est la 2e apparition de la règle 148 dans le rewrite, celui qui bloque les sh)


<< exécution >>

Lancer la page suivante :
http://www.NOMDEDOMAINE.com/jfindfiles.sh

Après, ne pas oublier
- de remettre en l'état .htaccess (aux deux endroits)
- de supprimer les fichiers


<< myJoomla >>

Attention, si on utilise myJoomla, cet outil crée ses propres tables (les tables bf_)... qui listent notamment TOUS les fichiers dans l'arborescence du site.
Donc, forcément, si on ne l'adapte pas, le présent script ne trouverait quasiment aucun fichier image inutilisée...

Il faut donc exclure ces tables de myJoomla dans le query qui fait le dump de la database :
On ajoute donc la ligne l'exclusion de 3 tables bf_ (autrement dit, on ajout trois --ignore-table=)
if mysqldump --skip-opt --add-drop-table --add-locks --create-options --disable-keys --lock-tables --quick --set-charset --ignore-table=${database}.bf_core_hashes --ignore-table=${database}.bf_files --ignore-table=${database}.bf_files_last --host=${host} --user=${dbuser} --password=${password} ${database} > ${database}.sql

NB : si le dump ne passe pas, il se peut qu'il y ait un problème avec le fichier jfunctions lors du transfert FTP (les fameuses lignes vides qui s'intercalent).
Dans ce cas, éditer le fichier depuis le FTP, resauver (et retester en l'ouvrant à nouveau)
Pour être conscient de ce problème, j'ai ajouté le code suivant dans le fichier jfindfiles :
echo "Configuration (host etc. Si rien ne s'affiche, éditer jfunctions puis éditer et sauver pour éviter les double lignes qui font en fait planter) :".${host}." ".${dbuser}." ".${database}

Attention, si on édite le fichier qui est déjà uploadé sur le serveur via FTP, à chaque fois il rebascule sur CHMOD 604 vu que le fichier est à nouveau uploadé... et il faut le remettre manuellement sur 755 !


<< purger éventuellement l'historique des versions >>

Attention, il y a des fichiers jpg ou autres qui peuvent être mentionnés (uniquement...) dans l'historique des versions mais qui ne sont plus utilisées dans la version actuelle du site.
Si on peut s'en passer, on peut purger la table ucm_history. Mais attention, forcément cela veut dire qu'on ne pourra plus revenir aux versions précédentes des articles. En effet :
The ucm_history table contains previous versions of articles. Truncating that table will simply remove your ability to roll-back articles to those ...
Alternativement, on pourrait ajouter l'exclusion de cette table dans le query de dump de la base de données

Joomla! User Group Wallonie is not affiliated with or endorsed by the Joomla!® Project or Open Source Matters. The Joomla!® name and logo is used under a limited license granted by Open Source Matters, the trademark holder in the United States and other countries.

Privacy Policy

© 2020 Joomla! User Group Wallonie - Tous droits réservés
Le site du JUG Wallonie est protégé et optimisé par aeSecure
We use cookies

Nous utilisons des cookies sur notre site web. Certains d’entre eux sont essentiels au fonctionnement du site et d’autres nous aident à améliorer ce site et l’expérience utilisateur (cookies analytiques p.ex., mais aussi l'affichage de contenus externes tels que des posts Facebook, Twitter, des slides ou encore des vidéos).

Vous pouvez décider vous-même si vous autorisez ou non ces cookies.

Merci de noter que, si vous les rejetez, vous risquez de ne pas pouvoir utiliser l’ensemble des fonctionnalités du site.