45 votes

Exclure les fichiers cachés de scandir

J'utilise le code suivant pour obtenir une liste d'images dans un répertoire :

$files = scandir($imagepath);

mais $files comprend également des fichiers cachés. Comment les exclure ?

82voto

mario Points 76989

Sous Unix, vous pouvez utiliser preg_grep pour filtrer les noms de fichiers qui commencent par un point :

$files = preg_grep('/^([^.])/', scandir($imagepath));

7voto

Agnel Vishal Points 426
$files = array_diff(scandir($imagepath), array('..', '.'));

o

$files = array_slice(scandir($imagepath), 2);

peut être plus rapide que

$files = preg_grep('/^([^.])/', scandir($imagepath));

5voto

seengee Points 9367

J'ai tendance à utiliser DirectoryIterator pour ce genre de choses, qui fournit une méthode simple pour ignorer les fichiers point :

$path = '/your/path';
foreach (new DirectoryIterator($path) as $fileInfo) {
    if($fileInfo->isDot()) continue;
    $file =  $path.$fileInfo->getFilename();
}

4voto

function nothidden($path) {
    $files = scandir($path);
    foreach($files as $file) {
        if ($file[0] != '.') $nothidden[] = $file;
        return $nothidden;
    }
}

Il suffit d'utiliser cette fonction

$files = nothidden($imagepath);

2voto

TiMacDonald Points 11

Je pense que parce que vous essayez de "filtrer" les fichiers cachés, il est plus logique et préférable de procéder ainsi...

$items = array_filter(scandir($directory), function ($item) {
    return 0 !== strpos($item, '.');
});

Je n'appellerais pas non plus la variable $files car il implique qu'il ne contient que des fichiers, mais vous pouvez en fait obtenir des répertoires également... dans certains cas :)

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