61 votes

PHP file_exists et wildcard

Existe-t-il un moyen d'écrire la fonction PHP file_exists pour qu'elle recherche dans un répertoire un fichier avec une extension quelconque? Par exemple, supposons que je sache qu'un fichier s'appelle "hello", mais que je ne connaisse pas l'extension, comment pourrais-je écrire une fonction qui recherche un fichier appelé hello. * Et renvoie le nom de ce fichier? Autant que je sache, file_exists ne cherchera qu'une chaîne.

Merci.

106voto

Pascal MARTIN Points 195780

Vous êtes à la recherche pour l' glob() fonction.

file_exists n'est pas n'importe quel type de recherche : il ne permet de savoir si une fle existe ou pas, quand knowingf son nom.

Et, avec PHP >= 5.3, vous pouvez utiliser le nouveau GlobIterator.


Comme un exemple avec glob(), la partie suivante de code :

$list = glob('temp*.php');
var_dump($list);

Donne-moi de cette sortie :

array
  0 => string 'temp-2.php' (length=10)
  1 => string 'temp.php' (length=8)


Tandis que celui-ci :

$list = glob('te*-*');
var_dump($list);

Oui, avec deux * ;-)

Va me donner :

array
  0 => string 'temp-2.php' (length=10)
  1 => string 'test-1.php' (length=10)
  2 => string 'test-curl.php' (length=13)
  3 => string 'test-phing-1' (length=12)
  4 => string 'test-phpdoc' (length=11)

9voto

Gordon Points 156415

Depuis PHP 5.3, vous pouvez également utiliser les GlobIterator pour rechercher un répertoire avec des caractères génériques:

 $it = iterator_to_array(
    new GlobIterator('/some/path/*.pdf', GlobIterator::CURRENT_AS_PATHNAME) );
 

renverrait les chemins complets de tous les fichiers .pdf dans certains / chemins dans un tableau. Les opérations ci-dessus fonctionnent à peu près comme glob() , mais les itérateurs fournissent une API plus puissante et plus extensible.

6voto

luciomonter Points 101

Tant que file_exists renvoie un BOOLEAN, j'ai écrit cette petite fonction qui accepte une chaîne de recherche avec * pour rechercher des fichiers ... Exemple:

     searchForFile("temp*");

    function searchForFile($fileToSearchFor){
        $numberOfFiles = count(glob($fileToSearchFor));
        if($numberOfFiles == 0){ return(FALSE); } else { return(TRUE);}
    }
 

1voto

CrashRoX Points 136

Si vous avez besoin d'un peu plus de contrôle et que vous utilisez PHP avant PHP 5.3, vous pouvez utiliser DirectoryIterator ou RecursiveDirectoryIterator. Les deux ont beaucoup de fonctionnalités pour un contrôle et une manipulation supplémentaires.

Les documents PHP sont à DirectoryIterator et RecursiveDirectoryIterator

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X