1
votes

comment exclure un certain dossier lors de l'utilisation de scandir en php

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)


2 commentaires

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


4 Réponses :


1
votes

Essayez:

   $toRemove = array('.','..','tmp'); 

   $cdir = scandir($dir);
   
   $result = array_diff($cdir, $toRemove);

C'est plus facile que preg_grep


0 commentaires

0
votes

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));


0 commentaires

0
votes

J'aurais fait quelque chose comme ça si tu voulais rester avec regex

$ files = preg_grep ('/ ^ (?! tmp | (?! ([^.]))). * /', scandir ($ dir));


0 commentaires

1
votes

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") );


1 commentaires

Je suis d'accord! c'est la meilleure façon de procéder. fonctionne très bien!