J'utilise le code suivant pour obtenir une liste d'images dans un répertoire:
$files = scandir($imagepath);
mais $files
inclut également les fichiers cachés. Comment puis-je les exclure?
Sous Unix, vous pouvez utiliser preg_grep
pour filtrer les noms de fichiers commençant par un point:
$files = preg_grep('/^([^.])/', scandir($imagepath));
function nothidden($path) {
$files = scandir($path);
foreach($files as $file) {
if ($file[0] != '.') $nothidden[] = $file;
return $nothidden;
}
}
Utilisez simplement cette fonction
$files = nothidden($imagepath);
J'ai tendance à utiliser DirectoryIterator pour des choses comme celle-ci, qui fournit une méthode simple pour ignorer les fichiers de points:
$path = '/your/path';
foreach (new DirectoryIterator($path) as $fileInfo) {
if($fileInfo->isDot()) continue;
$file = $path.$fileInfo->getFilename();
}
Je pense que parce que vous essayez de "filtrer" les fichiers cachés, cela a plus de sens et semble préférable de le faire ...
$items = array_filter(scandir($directory), function ($item) {
return 0 !== strpos($item, '.');
});
Je n’appellerais pas non plus la variable $files
car elle implique qu’elle ne contient que des fichiers, mais vous pouvez également obtenir des répertoires ... dans certains cas :)
utilisez preg_grep pour exclure le nom de fichier avec des caractères spéciaux, par exemple.
$dir = "images/";
$files = preg_grep('/^([^.])/', scandir($dir));
En supposant que les fichiers cachés commencent par un .
, vous pouvez procéder de la manière suivante:
foreach($files as $file) {
if(strpos($file, '.') !== (int) 0) {
echo $file;
}
}
Maintenant, vous vérifiez pour chaque élément s'il n'y a pas de .
en tant que premier caractère, sinon, il vous renvoie comme vous le feriez.
Utilisez le code suivant si vous souhaitez également réinitialiser l'index de tableau et définir l'ordre:
$path = "the/path";
$files = array_values(
preg_grep(
'/^([^.])/',
scandir($path, SCANDIR_SORT_ASCENDING)
));
Une ligne:
$path = "daten/kundenimporte/";
$files = array_values(preg_grep('/^([^.])/', scandir($path, SCANDIR_SORT_ASCENDING)));
J'ai rencontré un commentaire de php.net, spécifiquement pour les systèmes Windows: http://php.net/manual/fr/function.filetype.php#87161
Citant ici à des fins d'archivage:
J'utilise la version CLI de PHP sur Windows Vista. Voici comment déterminer si un fichier est marqué "caché" par NTFS:
function is_hidden_file($fn) { $attr = trim(exec('FOR %A IN ("'.$fn.'") DO @ECHO %~aA')); if($attr[3] === 'h') return true; return false; }
Changer
if($attr[3] === 'h')
enif($attr[4] === 's')
vérifiera les fichiers système.Cela devrait fonctionner sur tout système d'exploitation Windows fournissant des commandes DOS Shell.