2010-12-09 6 views
0

J'essaie de trouver tous les fichiers qui s'appellent "testunit.php". En outre, je veux couper les 23 premiers caractères de la chaîne.trouver le fichier spécifique récursif

J'ai essayé ceci mais cela ne fonctionne pas. J'obtiens tous les dossiers.

$it = new RecursiveDirectoryIterator($parent); 
$display = Array ('testunit.php'); 
foreach (new RecursiveIteratorIterator($it) as $file=>$cur) { 
{ 
if (In_Array ($cur, $display) == true) 
       $file = substr($cur, 23) 
       fwrite($fh,"<file>$file</file>"); 

} 

Merci!

+0

Regardez par ex. ici. http://www.php.net/manual/en/class.recursivedirectiteriterator.php#92233 vous récupérez les informations à tort dans la boucle, il doit être 'as $ file => $ cursor' (' cursor' étant un objet itérateur) –

+0

Il ne fonctionne pas .. j'ai essayé de faire 'foreach (new RecursiveIteratorIterator ($ it) comme $ file => $ cur) {' – Ronny

+0

C'est ok maintenant .. merci – Ronny

Répondre

1

voir si glob vous aide à

+2

Pourquoi? Le 'RecursiveDirectoryIterator' est nouveau, fantaisie, POO, et peut rechercher récursivement. S'il corrige son code existant, il aura une solution supérieure à 'glob()' –

0

Essayez

class TestUnitIterator extends FilterIterator 
{ 
    public function accept() 
    { 
     return (FALSE !== strpos(
      $this->getInnerIterator()->current(), 
      'testunit.php' 
     )); 
    } 
    public function current() 
    { 
     return sprintf(
      '<file>%s</file>', 
      substr($this->getInnerIterator()->current(), 23) 
     ); 
    } 
} 

Utilisation (codepad (abridged example)):

$iterator = new TestUnitIterator(
    new RecursiveIteratorIterator(
     new RecursiveDirectoryIterator(
      '/path/to/iterate/over', 
      FilesystemIterator::CURRENT_AS_PATHNAME 
     ) 
    ) 
); 
foreach ($iterator as $file) { 
    echo $file, PHP_EOL; 
} 

Disclaimer: Je n'étais pas d'humeur à se moquer du système de fichiers ou configurer les fichiers de test requis, de sorte que le ci-dessus pourrait avoir besoin d'un peu peaufiner pour travailler avec le système de fichiers . J'ai seulement testé avec un ArrayIterator mais il ne devrait pas y avoir beaucoup à faire si ce qui précède produit des erreurs.

Questions connexes