Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/12/2010, 20h22   #1
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
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 :
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;
	}
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 20h30   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/12/2010, 14h17   #3
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
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
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2010, 16h47   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 10h08   #5
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
FilterIterator est tout désigné pour ce que tu souhaites faire :


Petit exemple :
Code :
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.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 13h13   #6
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Cette partie pose problème pour voir comment fonctionne votre exemple:

Code :
1
2
if(in_array(File_Util::getExtension($this->current()), $this->extensions))
                return true;
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 13h23   #7
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
C'est juste un helper qui retourne l'extension du fichier courant.
Tu dois pouvoir le remplacer par quelque chose comme
Code :
substr(strrchr($this->current(),'.'),1)
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h19   #8
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Je vais tester votre exemple, mais je ne vous cache pas que je dois faire un système pour scanner de manière recursive un dossier et afficher un arbre hiérarchique.
Dans le style :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<ul>
      <li><a href="#"><span class="folder"></span>test</a>
             <ul>
                    <li><a href="test/index.phtml"></a></li>
                    <li><a href="test/truc.phtml"></a></li>
                    <li><a href="#"><span class="folder"></span>deuxieme</a>
                          <ul>
                                 <li><a href="test/deuxieme/index.phtml"></a></li>
                                 <li><a href="test/deuxieme/truc.phtml"></a></li>
                          </ul>
                    </li>
             </ul>
       </li>
</ul>
Cette arbre me permettra de mettre en place mon éditeur de code qui fonctionne mais j'ai besoin d'avoir un menu de ce style.
Je ne sais pas si SPL permet ce genre de menu en une seule fois
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h24   #9
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Il est possible de retourner la profondeur d'un dossier dans une arboresence (getDepth) donc à priori , un tableau des fichiers avec leur profondeur respective devrait permettre le rendu finale recherché.

Après effectivement y'a pas encore de methode buildHTMLtree() dans la SPL
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 17h34   #10
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Donc que je peux utiliser votre méthode et y ajouter un test avec getDepth pour avoir la profondeur.
J'ai l'ai fais pour un menu horizontal dynamique mais je n'utilisais pas le parcourt de fichier et de dossier.
Mais je souhaite vraiment comprendre SPL de manière plus poussée que ce que j'ai vu jusque maintenant.
Faut bien corriger les lacunes
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 14h26   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par grunk Voir le message
C'est juste un helper qui retourne l'extension du fichier courant.
Tu dois pouvoir le remplacer par quelque chose comme
Code :
substr(strrchr($this->current(),'.'),1)
jamais compris pourquoi les gens faisait ca,
pathinfo ca existe depuis longtemp
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h51.


 
 
 
 
Partenaires

Hébergement Web