J'utilise scandir pour lister tous les fichiers d'un répertoire. Mais il devrait y avoir une exception pour les dossiers ./
, ../
et tmp
.
J'ai déjà ceci pour exclure le point et double point:
$files = preg_grep('/^([^.])/', scandir($dir));
Comment puis-je y ajouter le dossier tmp
? (le nom du dossier est tmp)
4 Réponses :
Essayez:
$toRemove = array('.','..','tmp'); $cdir = scandir($dir); $result = array_diff($cdir, $toRemove);
C'est plus facile que preg_grep
Comme il s'agit d'une expression régulière, vous pouvez essayer de jeter un œil à la lookahead négatif :
$files = preg_grep('/^(?!tmp|\.{1,2})$/', scandir($dir));
J'aurais fait quelque chose comme ça si tu voulais rester avec regex
$ files = preg_grep ('/ ^ (?! tmp | (?! ([^.]))). * /', scandir ($ dir));
Je choisirais pour cette solution, car déjà mentionné par @duskwuff, votre code actuel exclut tous les fichiers qui commencent par un .
$files = array_diff( scandir($dir), array(".", "..", "tmp") );
Je suis d'accord! c'est la meilleure façon de procéder. fonctionne très bien!
En passant: le code que vous utilisez exclura tout fichier ou répertoire dont le nom commence par un point. Cela peut ou non être quelque chose que vous voulez réellement.
Je suis d'accord.! Mais un nom commençant par un point n'est pas autorisé. Il est filtré dans l'entrée