IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[SPL] exclure des extensions d'une liste


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut [SPL] exclure des extensions d'une liste
    Bonsoir j'ai une fonction pour lister un dossier et retourner les fichiers mais je ne parviens pas à exclure plusieurs type de fichier.
    Seul un seul type est exclus, je tente d'exclure les fichiers .jpg,.png,.svn
    Scanne un dossier défini :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function scanRecursiveDir($directory,$exclude=''){
    		$file = '';
    		$it = new DirectoryIterator($directory);
    		for($it->rewind(); $it->valid(); $it->next()) {
    	             if($it->isDir() && !$it->isDot()){
    	       		if($it->getFilename() == $exclude) continue;
             		$file[] = $it->getFilename();
          		     }
       		}
    		return $file;
    	}

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    hello, déjà utilise FilesystemIterator, ça t’évitera de faire les isDot, ensuite c'est un iterator, donc un foreach est plus approprié
    pour finir, je vois ce qu'il te gène t'as juste a faire un condition sur l'extension après...
    sinon utilise RegexIterator pour filtrer le contenu. Il suffira juste de renvoyer l'iterator a ta fonction et si tu veux vraiment un array utilise iterator_to_array après

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    Merci ,je viens de regarder mais aucun exemple d'utilisation
    Y a t-il un exemple qui traine quelque part pour http://php.net/manual/fr/class.filesystemiterator.php et

    J'ai également regarder http://be2.php.net/manual/fr/functio...r-to-array.php sa me semble pas mal, je dois le caser dans une belle petite fonction

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par gtraxx Voir le message
    Merci ,je viens de regarder mais aucun exemple d'utilisation
    Y a t-il un exemple qui traine quelque part pour http://php.net/manual/fr/class.filesystemiterator.php et

    J'ai également regarder http://be2.php.net/manual/fr/functio...r-to-array.php sa me semble pas mal, je dois le caser dans une belle petite fonction
    FilesystemIterator etand DirectoryIterator, donc c'est la même chose sauf qu'il prend pas les dot, tu peux aussi faire ton filtre avec FilterIterator

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    FilterIterator est tout désigné pour ce que tu souhaites faire :


    Petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    class File_Decorator_Filter extends FilterIterator
    {
        /**
         * Liste des extensions à autoriser. Toutes si vide
         * @var array
         */
        private $extensions = array();
     
        /**
         * Vérifie qu'un élément peut être listé
         * @return boolean
         */
        public function accept()
        {
    		if(empty($this->extensions))
                return true;
            else
            {
                if(in_array(File_Util::getExtension($this->current()), $this->extensions))
                    return true;
            }
            return false;
        }
     
        /**
         * Défini une ou plusieurs extsions à autoriser
         * @param string|array $filter  
         */
        public function setExtension($filter)
        {
            if(!is_array($filter))
    			$this->extensions[] = strtolower($filter);
            else
    			$this->extensions = array_merge($this->extensions,$filter);
        }
    }
     
    //Extrait de la classe de gestion de fichier : 
     
    public function listRecursive()
    {
    	$folder = new File_Decorator_Filter(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->dossier),true));
    	$folder->setExtension($this->filtre);
    	$liste = array();
    	$compteur =  0;
    	foreach($folder as $file)
    	{
    		$liste[$compteur]['name'] = $file->getFilename();
    		$liste[$compteur]['size'] = round($file->getSize()/1024,3);
    		$liste[$compteur]['depth'] = $folder->getDepth();
    		$compteur++;
    		//echo str_repeat('-',$folder->getDepth()).' '.$file.'<br />';
    	}
    	return $liste;
    }
    Dans mon framework je n'ai intégré qu'un filtre par extension mais tu dois pouvoir ajouter un filtre par type mime ou tout auter chose selon tes besoins.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    Cette partie pose problème pour voir comment fonctionne votre exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(in_array(File_Util::getExtension($this->current()), $this->extensions))
                    return true;

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/11/2013, 20h32
  2. [CSS]Changer l'interligne des éléments d'une liste à puces
    Par khany dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 21/03/2005, 13h57
  3. [Lisp] Suppression des parenthèses dans une liste
    Par bourdaillet dans le forum Lisp
    Réponses: 3
    Dernier message: 19/12/2004, 21h02
  4. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo