Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
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 25/01/2012, 16h46   #1
Invité de passage
 
Inscription : janvier 2012
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 8
Points : 0
Points : 0
Par défaut Regexp pour exclusion de répertoire dans Phar

Bonjour,

Je souhaite créer un système automatisé d'archivage de dossiers en utilisant la classe Phar de Php 5.3.

D'après la documentation, je peux ajouter un dossier et faire une exclusion avec une Regexp.
array Phar::buildFromDirectory ( string $base_dir [, string $regex ] )

J'ai donc l'arborescence suivante:
/repertoire1
/repertoire1/fichier1
/repertoire1/fichier2
/repertoire1/...

/repertoire2
/repertoire2/fichier1
/repertoire2/...

/tmp
...
/cache
...

Et j'aimerais EXCLURE les dossiers tmp et cache.

Je sais faire l'expression qui ne sélectionnera QUE ces deux dossiers
^\/cache(.*)|^\/tmp(.*)
, mais pas les exclure!

Quelle Regexp utiliser pour exclure ces deux dossiers?

Merci de votre aide!
liliwol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 17h30   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 250
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 250
Points : 8 635
Points : 8 635
tu vas devoir passer par buildFromIterator, coupler à RecursiveDirectoryIterator + RegexIterator
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 14h31   #3
Invité de passage
 
Inscription : janvier 2012
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 8
Points : 0
Points : 0
Merci pour le renseignement, mais je bloque encore...

Voici ce que je fais pour afficher la liste des dossiers et fichiers que j'insérerai dans l'archive:
Code :
1
2
3
4
5
6
7
8
9
 
$iter = new RecursiveIteratorIterator(
		new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::KEY_AS_FILENAME)
		    , RecursiveIteratorIterator::SELF_FIRST);
 
$f = new RegexIterator($iter,'/^(.*)/');
 
    foreach ($f as $value) 
	echo $value->key().' - '.$value->getFilename().'<br />';
Et peu importe la regex que j'utilise, je n'ai rien qui s'affiche. En bref je ne sais pas comment utiliser RegexIterator sur un autre Iterator.
liliwol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 15h08   #4
Invité de passage
 
Inscription : janvier 2012
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 8
Points : 0
Points : 0
Bon en fait, je me demande si je suis même sur la bonne voie étant donné que je veux EXCLURE certains dossiers au moyen de ma Regex.

Or, RegexIterator ne permet dans ses constantes que de soit sélectionner la PREMIÈRE, soit TOUTES les occurrences.

Je veux un DirectoryRecursiveIterator et ensuite un test basique
if (strpos($entry,'/tmp') || (strpos($entry,'/cache')
qui EXCLUT les deux dossiers.

Est il possible de faire une négation d'un RegexIterator?
liliwol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 15h23   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 250
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 250
Points : 8 635
Points : 8 635
tu peux créer ton propre filtre avec FilterIterator
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2012, 14h22   #6
Invité de passage
 
Inscription : janvier 2012
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 8
Points : 0
Points : 0
Ok merci en effet comme ça ça peut fonctionner.

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
class ExcludeFolderFilter extends FilterIterator{
	private $userFilter;
 
	public function __construct(Iterator $iterator , $filter ){
	    parent::__construct($iterator);
	    $this->userFilter = $filter;
	}
 
	public function accept(){
	    $folder = $this->getInnerIterator()->current();
 
	    // Création de la REGEX à partir du tableau d'exclusion des dossiers
	    $regex_text = str_replace('/', '\/', implode('|',$this->userFilter));
	    $regex_text = str_replace('.', '\.', $regex_text);
 
	    //echo "<br/>REGEXP :" . $regex_text . "<br/>";
 
	    $regex = '/^(?:' . $regex_text . ')(.*)$/';
	    if (preg_match($regex, $folder->getPath())){		
		return false;
	    }else{
		return true;
	    }
	}
    }
 
$iter = new RecursiveIteratorIterator(
		new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::KEY_AS_FILENAME)
		    , RecursiveIteratorIterator::SELF_FIRST);
 
    $iterator = new ExcludeFolderFilter($iter, $exclusion_array);
 
$phar->buildFromIterator($iterator, $root);
Cependant j'ai à présent un souci qui ne concerne plus l'itération, mais le comportement de Phar.

En fait, dans mes fichiers il y en a qui ont des caractères "invalides" selon Phar. Sauf que moi je veux quand même conserver ces caractères!

Que dois je faire pour que ce fichier soit tout de même ajouté à l'archive?
Evidemment, je veux conserver le nom du fichier intact...

Est ce dans le FilterIterator que je peux modifier son "étiquette" dans l'itération?

Faut il que je crée un nouveau sujet pour cette question?

Merci
liliwol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 09h48   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 250
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 250
Points : 8 635
Points : 8 635
Citation:
Envoyé par liliwol Voir le message
En fait, dans mes fichiers il y en a qui ont des caractères "invalides" selon Phar. Sauf que moi je veux quand même conserver ces caractères!

quels caractères ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 10h19   #8
Invité de passage
 
Inscription : janvier 2012
Messages : 8
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 8
Points : 0
Points : 0
En fait j'ai créé un nouveau sujet spécifique pour ça vu que ça ne correspond plus aux iterators...

http://www.developpez.net/forums/d11...hiers-accents/

Le fichier s'appelle
salle de contrôle.png
liliwol 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 00h45.


 
 
 
 
Partenaires

Hébergement Web