D’abord, les documents distants, car c’est (paradoxalement) le plus facile à faire :
<BOUCLE_f(DOCUMENTS){distant=oui}>
[(#FICHIER|unique|?{'',#ID_DOCUMENT - #FICHIER})<br>]
</BOUCLE_f>
Explication : |unique
ne ressort la valeur (#FICHIER
, en l’occurrence) que la première fois qu’elle apparaît. La deuxième fois, ou les fois suivantes, |unique
rend un résultat vide, et le test |?{'', xxx}
affiche xxx, c’est-à-dire ici #ID_DOCUMENT
et #FICHIER
.
Et voilà, nos doublons sont listés.
* *
Ensuite, voyons les documents locaux, chargés normalement dans l’interface de SPIP. Là on va faire plus fort, car on va tester le contenu des fichiers.
<BOUCLE_g(DOCUMENTS){distant=non}{taille<4000000}>
[(#FICHIER|file_get_contents|md5|unique|?{'',#ID_DOCUMENT - #FICHIER})<br>]
</BOUCLE_g>
Avec le filtre file_get_contents
(une fonction php standard), on récupère tout le contenu du fichier, qu’on filtre ensuite par md5
(une autre fonction php) pour le transformer en une « clé » de petite taille, qu’on donnera ensuite à manger au filtre |unique
. (Ce dernier, en effet, conserve en mémoire les données qu’on lui passe, pour pouvoir faire des comparaisons d’une fois sur l’autre : mieux vaut ne pas lui donner des fichiers complets à mémoriser !)
Attention, si cette méthode permet de gérer beaucoup de fichiers, il suffit que l’un des fichiers soit très très gros, pour que cela fasse exploser la mémoire de php au moment du file_get_contents
, et provoque une erreur ; c’est pourquoi on limite cette méthode à des fichiers de taille < 4Mo.
Pour ces derniers, on se limitera à une comparaison du type et de la taille du document :
<BOUCLE_h(DOCUMENTS){distant=non}>
[(#TAILLE|parametre_url{s,#EXTENSION}|md5|unique|?{'',#ID_DOCUMENT - #FICHIER})<br>]
</BOUCLE_h>
A noter, l’utilisation du filtre parametre_url
, pour concatener (mettre « bout-à-bout ») les valeurs de #TAILLE
et de #EXTENSION
.
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |