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

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Class sur répertoire


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut Class sur répertoire
    Voila j'ai voulu crée une galerie d'image comme beaucoup je pense.

    Et voila j'ai eu besoin de pas mal de fonctione de listage ect...
    J'ai donc crée une class sur les repertoires.

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
     
    <?php
     
    class rep {
     
    	public $uri; //chemin du repertoire
    	public $exist; // si le repertoire existe
     
        function __construct($uri) {
        	$this->uri   = $uri;
        	$this->exist = is_dir($uri);
        }
     
     
       // Retourne la liste des fichiers du repertoire
    	function listeFile(){
       	$file = array();    	
        	if($this->exist){
        		$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					if(!is_dir($this->uri.'/'.$fichier)){
    	            	$file[] = $fichier;
             		}
          		}
       		}
       		closedir($pointeur);
       		return($file);	
        	}
        	else{
        		return($file);
        	}    		
       }  
     
       // Retourne le nombre de fichiers du repertoire
    	function nbFile(){
        	if($this->exist){
        		$cpt = 0;
        		$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					if(!is_dir($this->uri.'/'.$fichier)){
    	            	$cpt++;
             		}
          		}
       		}
       		closedir($pointeur);
       		return($cpt);	
        	}
        	else{
        		return(-1);
        	}    		
    	}	
     
     
       // Retourne la liste des repertoires du repertoire
    	function listeRep(){
        	$rep = array();    	
        	if($this->exist){
        		$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					if(is_dir($this->uri.'/'.$fichier)){
    	            	$rep[] = $fichier;
             		}
          		}
       		}
       		closedir($pointeur);
       		return($rep);	
        	}
        	else{
        		return($rep);
        	}    		
    	} 
     
       // Retourne le nombre de Repertoire du repertoire
       function nbRep(){
        	if($this->exist){
        		$cpt = 0;
        		$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					if(is_dir($this->uri.'/'.$fichier)){
    	            	$cpt++;
             		}
          		}
       		}
       		closedir($pointeur);
       		return($cpt);	
        	}
        	else{
        		return(-1);
        	}    		
    	}	
     
       // Retourne la taille prise par le repertoire
    	function koRep(){		
    		if($this->exist){
    			$poids = 0;
    			$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					$tempFile = $this->uri.'/'.$fichier;
     					if(is_dir($tempFile)){
    	            	$temp = new rep($tempFile);
    	            	$poids += $temp->koRep();
             		}
             		else{
             			$tempPoids = round(filesize($tempFile)/1024);
             			if($tempPoids === FALSE){
             				$poids = $poids;
             			}
             			else{
             				$poids += $tempPoids;	
             			}         			 
             		}
          		}
       		}
       		closedir($pointeur);
       		return($tempPoids);	
    		}
    		else{
    			return(-1);
    		}
    	}
     
    	// Supprime un fichier du repertoire
    	function delFile($nameFile){
    		return(unlink($this->uri.'/'.$nameFile));
    	}
     
    	// Test l'existance d'un fichier dans le repertoire et sous repertoire
    	function fileInRep($nameFile){
    		if($this->exist){
    			$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					$tempFile = $this->uri.'/'.$fichier;
     					if(is_dir($tempFile)){
    	   	         $temp = new rep($tempFile);
    	   	         if($temp->fileInRep($nameFile)){
    	   	         	closedir($pointeur);
    	   	         	return(true);
    	   	         }
          	   	}
          	   	else{
          	   		if($nameFile == $fichier){
          	   			echo 'Fichier trouvé : '.$tempFile;
          	   			closedir($pointeur);
          	   			return(true);
          	   		}
          	   	}
          		}
       		}
       		closedir($pointeur);
       		return(false);
    		}
    		else{
    			return(false);
    		}	
    	} 
     
    	// Retourne un time de la derniere modification d'un élément du répertoire
    	function lastModificationRep(){
    		if($this->exist){
        		$time = -1;
        		$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					$tempFile = $this->uri.'/'.$fichier;
     					if(is_dir($this->uri.'/'.$fichier)){
    	            	 $temp = new rep($tempFile);
    	            	 $tempTime = $temp->lastModificationRep();
    	            	 if(($tempTime != false) && (($time > $tempTime) || $time == -1))
    	            	 	$time = $tempTime;
             		}
             		else{
             			if($time > filemtime($tempFile) || $time == -1)
             				$time = filemtime($tempFile);
             		}
          		}
       		}
       		closedir($pointeur);
       		return($time);	
        	}
        	else{
        		return(-1);
        	} 		
    	}
    }
    ?>
    Si vous avez des améliorations à apporter n'hesitez pas.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Au lieu de faire la boucle de parcours du répertoire dans chaque méthode, tu pourrais la faire dans le constructeur une seule fois et dans cette boucle tu renseignes plusieurs attributs comme le nombre de fichiers, la liste des répertoires, la liste des fichiers

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Effectivement j'y avais pensé.

    Mais si je veux pas parcourir le fichier à la création.
    Par exemple la y a une partie de methode mais si j'ai des methodes qui ne font pas cette boucle et que le dossier est énorme ca risque de prendre du temps pour rien non?

    Peut être faire a ce moment une fonction de boucle qui remplie les variables si on l'appel.

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par zulot
    Effectivement j'y avais pensé.

    Mais si je veux pas parcourir le fichier à la création.
    Par exemple la y a une partie de methode mais si j'ai des methodes qui ne font pas cette boucle et que le dossier est énorme ca risque de prendre du temps pour rien non?

    Peut être faire a ce moment une fonction de boucle qui remplie les variables si on l'appel.
    Oui ca me semble etre un bon compromis ca, ca te permet si tu veux appeler une fonction toute bete sur un gros répertoire de le faire sans charger la machine, la mémoire etc, mais si tu veux utiliser la plupart des fonctionnalités, le gros travail est fait une bonne fois pour toutes.

    Tu peux aussi rajouter un booléen au constructeur qui indique si cette fonction doit être appelée automatiquement (a la création de la classe).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    J'ai donc modifié une partie de ma classe.
    modifié une erreur dans la derniere fonction

    ce qui donne ceci :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    class rep {
     
    	public $uri;		 //chemin du repertoire
    	public $exist; 	 // si le repertoire existe
    	public $listeFile; // Liste des fichiers du repertoire
    	public $nbFile; 	 // Nombre de fichier dans le repertoire
    	public $listeRep;  // Liste des repertoires du repertoire
    	public $nbRep;		 // Nombre de repertoire dans le repertoire
    	//public $koRep;
    	//public $lastModif;
     
        function __construct($uri) {
        	$this->uri		  = $uri;
        	$this->exist 	  = is_dir($uri);
        	$this->listeFile = null;
        	$this->nbFile	  = -1;
        	$this->listeRep  = null;
        	$this->nbRep	  = -1;
        	//$this->koRep	  = -1;
        	//$this->lastModif = -1;
        }
     
     
       function listeFileRep(){
       	$file = array();
       	$rep = array();
       	$nbfile = 0;
       	$nbrep = 0;    	
        	if($this->exist){
        		$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					if(!is_dir($this->uri.'/'.$fichier)){
    	            	$file[] = $fichier;
    	            	$nbfile++;
             		}
             		else{
             			$rep[] = $fichier;
             			$nbrep++;
             		}
          		}
       		}
       		closedir($pointeur);
       		$this->listeFile = $file;
       		$this->nbFile	  = $nbfile;
       		$this->listeRep  = $rep;
       		$this->nbRep	  = $nbrep;	
        	}   		
       }  
     
     
       // Retourne la taille prise par le repertoire
    	function koRep(){		
    		if($this->exist){
    			$poids = 0;
    			$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					$tempFile = $this->uri.'/'.$fichier;
     					if(is_dir($tempFile)){
    	            	$temp = new rep($tempFile);
    	            	$poids += $temp->koRep();
             		}
             		else{
             			$tempPoids = round(filesize($tempFile)/1024);
             			if($tempPoids === FALSE){
             				$poids = $poids;
             			}
             			else{
             				$poids += $tempPoids;	
             			}         			 
             		}
          		}
       		}
       		closedir($pointeur);
       		return($tempPoids);	
    		}
    		else{
    			return(-1);
    		}
    	}
     
    	// Supprime un fichier du repertoire
    	function delFile($nameFile){
    		return(unlink($this->uri.'/'.$nameFile));
    	}
     
    	// Test l'existance d'un fichier dans le repertoire et sous repertoire
    	function fileInRep($nameFile){
    		if($this->exist){
    			$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					$tempFile = $this->uri.'/'.$fichier;
     					if(is_dir($tempFile)){
    	   	         $temp = new rep($tempFile);
    	   	         if($temp->fileInRep($nameFile)){
    	   	         	closedir($pointeur);
    	   	         	return(true);
    	   	         }
          	   	}
          	   	else{
          	   		if($nameFile == $fichier){
          	   			echo 'Fichier trouvé : '.$tempFile;
          	   			closedir($pointeur);
          	   			return(true);
          	   		}
          	   	}
          		}
       		}
       		closedir($pointeur);
       		return(false);
    		}
    		else{
    			return(false);
    		}	
    	} 
     
    	// Retourne un time de la derniere modification d'un élément du répertoire
    	function lastModificationRep(){
    		if($this->exist){
        		$time = -1;
        		$pointeur = opendir($this->uri);
    			while($fichier = readdir($pointeur)){
    				if(($fichier != '.') && ($fichier != '..')){
     					$tempFile = $this->uri.'/'.$fichier;
     					if(is_dir($this->uri.'/'.$fichier)){
    	            	 $temp = new rep($tempFile);
    	            	 $tempTime = $temp->lastModificationRep();
    	            	 if(($tempTime != -1) && (($time > $tempTime) || $time == -1))
    	            	 	$time = $tempTime;
             		}
             		else{
             			if($time > filemtime($tempFile) || $time == -1)
             				$time = filemtime($tempFile);
             		}
          		}
       		}
       		closedir($pointeur);
       		return($time);	
        	}
        	else{
        		return(-1);
        	} 		
    	}
     
    }
    L'histoire du boolean peut être aussi une très bonne idee.
    Vraiment dommage qu'on ne puisse pas faire de surcharge

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par zulot
    L'histoire du boolean peut être aussi une très bonne idee.
    Vraiment dommage qu'on ne puisse pas faire de surcharge
    Ben tu peux l'ajouter comme paramètre optionnel en dernier, avec la valeur false (ou true) par défaut, comme ca, ca ne modifie rien dans les codes qui l'utilisent déjà!

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Citation Envoyé par koopajah
    Ben tu peux l'ajouter comme paramètre optionnel en dernier, avec la valeur false (ou true) par défaut, comme ca, ca ne modifie rien dans les codes qui l'utilisent déjà!

    Ah je sais pas faire ca le parametre optionnel en php.

  8. #8
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par zulot
    Ah je sais pas faire ca le parametre optionnel en php.
    exemple tout bete:
    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
    function calcul($inA, $inB, $addition= TRUE)
    {
    if ($addition)
      return $inA + $inB;
    else
      return $inA - $inB;
    }
     
    // calcul 1 + 3
    echo calcul(1,3, true);
     
    // calcul de 1-3
    echo calcul(1,3,false);
     
    // calcul de 1 + 3 avec paramètre optionnel
    echo calcul(1,3);
    voila dans le dernier cas tu passes pas de valeur donc il prend la valeur par défaut que t'as indiqué dans l'entête (le prototype) de la fonction (ici TRUE)

    EDIT : ou comme le dit la FAQ Comment initialiser les arguments d'une fonction par défaut ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    merci de ta réponse rapide, j'avais cherché en meme temps et donc trouvé facilement c'est comme pour d'autre langage objet....

    J'essaye de me faire un mini Framework avec tout ca....(bien sur je n'ai pas que cette class)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CVS sur répertoire réseau,possible ou pas?
    Par oxygen_o2 dans le forum CVS
    Réponses: 1
    Dernier message: 19/11/2006, 09h49
  2. API pour droit d'accès sur répertoire
    Par swirtel dans le forum Windows
    Réponses: 1
    Dernier message: 03/05/2006, 13h33
  3. droits sur répertoire web
    Par emathieu13 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 03/04/2006, 20h59
  4. Afficher un bouton appartenant à une classe sur une form
    Par Julien_riquelme dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/09/2005, 13h10
  5. [html] Accès restreint sur répertoire
    Par francis m dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 22/05/2005, 13h27

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