web-dev-qa-db-fra.com

PHP file_exists et caractère générique

Existe-t-il un moyen d'écrire la fonction PHP file_exists afin qu'elle recherche dans un répertoire un fichier avec une extension arbitraire. Par exemple, supposons que je savais qu'un fichier s'appelait "bonjour", mais je ne connaissait pas l'extension, comment pourrais-je écrire une fonction qui a recherché un fichier appelé hello. * et a renvoyé le nom de ce fichier? Pour autant que je sache, file_exists ne recherchera qu'une chaîne.

Merci.

52
bsamek

Vous recherchez la fonction glob() .

file_exists Ne fait aucune recherche: il permet seulement de savoir si un fichier existe ou non, en connaissant son nom.

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


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

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

Me donne cette sortie:

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


Alors que celui-ci:

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

Oui, avec deux *; -)

Me donnera:

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)
92
Pascal MARTIN

Depuis PHP5.3, vous pouvez également utiliser 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) );

retournerait les chemins d'accès complets à tous les fichiers .pdf dans certains/chemin dans un tableau. Ce qui précède fonctionne à peu près comme glob(), mais les itérateurs fournissent une API plus puissante et extensible.

7
Gordon

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);}
    }
5
luciomonter

Si vous avez besoin d'un peu plus de contrôle et que vous êtes sur pre PHP 5.3, vous pouvez utiliser un DirectoryIterator ou RecursiveDirectoryIterator. Les deux ont beaucoup de fonction pour un contrôle et une manipulation supplémentaires.

Les documents PHP sont à DirectoryIterator et RecursiveDirectoryIterator

1
Adam Gotterer