Analyser un repertoire et en extraire des noms de fichiers

Par Frank Hélin, il y a 10 ans


Bonjour,

J'aimerai créer une fonction qui permette d'analyser le contenu d'un répertoire et qui en extrait les noms de tous les fichiers ayant pour suffixe .xml, swf et jpg. Idéalement, j'aimerai que chaque nom de fichier soit stocké dans une variable différente.
J'ai cherché des fonctions PHP, en vain. Quelqu'un peut-il m'aider ?

Merci.

16 réponses

Mehdi Kamil, il y a 10 ans

Et n'oublie surtour pas de return $fichiers apres ta boucle enfin si tu l'utilise dans une fonction

Azorgh, il y a 10 ans

Pourquoi ne pas utiliser un tableau pour stocker les noms ?
Et c'est que tu n'a pas la fonction pour les répertoires ?

Frank Hélin, il y a 10 ans

La fonction pourrait remplir automatiquement une table pour stocker les noms + extensions + ... , mais là je cherche un moyen de scanner un repertoire et d'en extraire le nom de tous les fichiers se terminant par exemple par .xml. Remplir les tables manuellement est une tâche trop longue vue le nombre de répertoire que j'ai à gérer.

Azorgh, il y a 10 ans

Je comprend pas ton raisonnement là. Si tu fait :

$fichiers = []; foreach($mesFichiers as $fichier){ if($fichier->isXmlFile()) // J'invente la fonction isXmlFile hein ?! $fichiers[] = $fichier; } // Ici $fichiers contiendra tout les nom des fichiers XML
Frank Hélin, il y a 10 ans

Je ne comprends pas tout. Qu'est censé faire la fonction isXmlFile() ?

Mehdi Kamil, il y a 10 ans

Si c'est un fichier XML

Khalysto, il y a 10 ans

La fonction isXmlFile() est censée vérifier l'extension de ton fichier avec une regex ou un strstr()

ThibaultJ, il y a 10 ans
<?php $dir = 'mon_repertoire'; $response = scan($dir); function scan($dir){ $files = array(); if(file_exists($dir)){ foreach(scandir($dir) as $f) { if(!$f || $f[0] == '.') { continue; } if(is_dir($dir . '/' . $f)) { $files[] = array( "name" => $f, "type" => "folder", "path" => $dir . '/' . $f, "items" => scan($dir . '/' . $f) ); } else { $files[] = array( "name" => $f, "type" => "file", "path" => $dir . '/' . $f, "size" => filesize($dir . '/' . $f) ); } } } return $files; } header('Content-type: application/json'); echo json_encode(array( "name" => "files", "type" => "folder", "path" => $dir, "items" => $response ));

Ceci va te retourner toutes les infos sur tes fichiers dans 'monrepertoire' en json.
Pour la suite a toi de jouer ;)
TJ

Frank Hélin, il y a 10 ans

Merci. Le script liste également les sous-repertoire, ce que je ne souhaite pas. J'aimerai ne lister que les fichiers sur 1 niveau. Pour json, je ne connais que de nom. Je vais chercher comment gérer ce format...

tleb, il y a 10 ans

Salut,

à noter, tu n'as pas besoin du JSON pour gérer ces données. $response est un tableau, tu en fais ce qu'il te chante.

D'ailleurs, je ne suis pas convaincu par la fonction de monsieur, mais soit.

Frank Hélin, il y a 10 ans

Je suis débutant, j'ai un peu de mal, là. En fait, j'ai besoin de récupérer le nom d'un fichier portant l'extension .xml dans un répertoire. Ne faut-il pas une fonction de recherche de fichiers portant l'extension .xml dans ce répertoire ? Je viens d'écrire une fonction qui me permet de récupérer le chemin du repertoire. Ensuite, je suis bloqué :-(

function repertoire($val,$dir_name) { $dir = $dir_name; $name = strstr($dir, $val); return $name; }
Frank Hélin, il y a 10 ans

Je connais cette fonction permettant de lister un repertoire, mais je bloque sur comment 'identifier' le fichier en question puis le stocker dans une variable.

Frank Hélin, il y a 10 ans

J'ai pu écrire un script qui fonctionne. Merci à vous :-)

Franck55, il y a 10 ans

Salut,

Le plus simple pour scanner un dossier c'est quand même la fonction glob

<?php foreach (glob("*.txt") as $filename) { echo "$filename occupe " . filesize($filename) . "\n"; } ?>