[RESOLU] RecursiveDirectoryIterator filtrer deux sous dossier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] RecursiveDirectoryIterator filtrer deux sous dossier

Re: RecursiveDirectoryIterator filtrer deux sous dossier

par syper » 14 oct. 2018, 20:35

SUJET RESOLU : je ne peut pas éditer le titre car création lorsque je n'était pas encore inscrit.

Re: RecursiveDirectoryIterator filtrer deux sous dossier

par syper » 14 oct. 2018, 20:33

Bonjour,
Merci tout d'abord de ton intervention.

Et encore merci pour les commentaires qui me permet de bien comprendre (c'est ça qui m'importe).

Re: RecursiveDirectoryIterator filtrer deux sous dossier

par tesmet » 14 oct. 2018, 17:11

Pour éviter une boucle foreach avec if et compteur, il faut appliquer un filtre sur RecursiveDirectoryIterator en dérivant de RecursiveFilterIterator ou via une fonction avec sa classe fille RecursiveCallbackFilterIterator
 
function filtrer_fichier($fileinfo, $filename, $iterator) {
  // les répertoires à ignorer... il y a peut-être plus simple, mais c'est l'idée
  if(strpos(strtoupper($filename), DIRECTORY_SEPARATOR . 'MINIATURE' . DIRECTORY_SEPARATOR) !== false) return false;
  if(strpos(strtoupper($filename), DIRECTORY_SEPARATOR . 'TEMP' . DIRECTORY_SEPARATOR) !== false) return false;
  // sinon c'est accepté
  return true;
}

$files = new RecursiveIteratorIterator(
  new RecursiveCallbackFilterIterator( // pour filtrer via une fonction
    new RecursiveDirectoryIterator(
      $dossier,
      FilesystemIterator::SKIP_DOTS // pas de répertoire . ou ..
    ),
   'filtrer_fichier' // la fonction ci-haut ou par closure function($fileinfo, $filename, $iterator) {...}
  )
);
         
echo iterator_count($files);
 
ou encore par un filtre regexp avec RecursiveRegexIterator
 
$files = new RecursiveIteratorIterator(
  new RecursiveRegexIterator( 
    new RecursiveDirectoryIterator(
      $dossier,
      FilesystemIterator::SKIP_DOTS // pas de répertoire . ou ..
    ),
    // encore une fois... il y a peut-être plus simple comme regexp, mais c'est l'idée
    '#^((?![/\\\\](MINIATURE|TEMP)[/\\\\]).)*$#i' // pas de répertoire MINIATURE ou TEMP
  )
);
 
echo iterator_count($files);

RecursiveDirectoryIterator filtrer deux sous dossier

par syper » 13 oct. 2018, 21:44

Bonjour,
J'ai besoin de votre aide je cherche à compter le nombre de fichier d'un répertoire et de ses sous répertoire (sauf deux) voila comment se compose mes dossiers :

Id_USER
---Id_ALBUM
--------MINIATURE (à ignorer)
--------TEMP (à ignorer)
---Id_ALBUM
--------MINIATURE (à ignorer)
--------TEMP (à ignorer)

Voila où j'en suis :
$dossier= '../album/'.$donneesuser['id'];
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dossier));
         
echo iterator_count($files); 
Mais du coup sa ne filtre pas les dossiers qui s'appel : MINIATURE et TEMP.

Help me please....

Merci d'avance.