Class directoryfile liste des dossiers et des fichiers

Soyez le premier à donner votre avis sur cette source.

Vue 5 240 fois - Téléchargée 573 fois

Description

Class DirectoryFile:
- Liste des dossiers et/ou des fichiers et les ajoutes dans un tableau (array);
- Les exemple montre comment manipuler les résultats dans des tableaux.
Tester avec: PHP Version 4.4.1RC2-dev.
Développer sur : Easy php 1.8 register_globals=off.
---------------------------
- Lancez le index.php avec votre navigateur pour voir les exemples et les sources.
- Possibilité d?exclure certain fichier ou dossier.
- choix des extensions a affiché.
- Accepte les extensions en majuscule et minuscule (indiquez les en minuscule)
- Encode les noms de fichier pour les passer en paramètre via l?url.
- Supprime les extensions et les _ dans les nom de fichier pour un affichage propre dans les liens (mon_fichier.html => mon fichier).

Source / Exemple :


<?php
/* By @rboretom le 09/2006*/
class DirectoryFile{
	var $SUPPORTED_EXT=array();
	var $files_not_supported=array();
	var $var_tri="tri";
	//constructeur
function DirectoryFile($supported_ext="",$exlude=""){
	//les extension supporter
	$this->SUPPORTED_EXT=$supported_ext;
	//exclu les fichier et/ou dossiers
	$this->files_not_supported=$exlude;
	}
function Search($dir=""){
if (is_dir($dir)) {
 if ($handle = opendir($dir)) {
    while (($file = readdir($handle)) !== false) {
        $parts = explode(".",$file);
        //separe l'extension
        $ext = $parts[count($parts)-1];
        //remplace les tiret par des espace
        $tiret = str_replace('_', ' ', $file);
        //enleve l'extension
        $string = str_replace('.'.$ext, '', $tiret);
        // Si le nom du fichier comporte des espaces, on l'encode !
        $string_space= str_replace(' ', '%20', $file);
        $chemin= str_replace(' ', '%20', $dir);
        //converti l'extension en minuscule
        $ext =strtolower($ext);
	if($file != "." && $file != ".."){
		//cache les fichiers a exclure
	if(!isset($this->files_not_supported[$file])){
		// c'est un dossier
	    if(count($parts)===1){
	$type="dir";
	//construit le tableau
	$Files[]=array(
					'name' =>$file,
					'namespace' =>$string_space,
					'stringname'=>$string,
					'ext'=>'',
					'path'=>$chemin,
					'type'=>$type
	);
	}
	//c'est un fichier
	       if(count($parts)===2){
	$type="files";
	/*   affiche uniquement les fichiers
	  ayant la bonne extension */
	     if(isset($this->SUPPORTED_EXT[$ext])){
	  //construit le tableau
	$Files[]=array(
					'name' =>$file,
					'namespace' =>$string_space,
					'stringname'=>strtolower($string),
					'ext'=>strtolower($ext),
					'path'=>$chemin,
					'type'=>$type);
			   }
			}
			  }
			}
		      }
    	}
}
if(isset($Files)){
return$Files;
}	
}
//separe les fichiers et dossiers
function Liste_files($Files,$type,$tri="name"){
if(isset($Files)){
foreach ($Files as $ligneDuTableau){
	if($ligneDuTableau["type"]===$type){
	//construit le tableau $ligne
	$ligne[]=array(
		'name' =>$ligneDuTableau["name"],
		'namespace' =>$ligneDuTableau["namespace"],
		'stringname'=>$ligneDuTableau["stringname"],
		'ext'=>$ligneDuTableau["ext"],
		'path'=>$ligneDuTableau["path"],
		'type'=>$ligneDuTableau["type"]
		);
 		$sort[]=$ligneDuTableau[$tri];
			 }
           }
//verrifie si le tableau existe
 if(isset($ligne)){
 	//tri les resultats
 array_multisort($sort, SORT_STRING, $ligne);
 return$ligne;}	
    }
 }
 /* Melange les 2 tableaux(dossiers/fichiers) */
 function file_merge($Dossier_a_explorer){
	$dir=$this->Search($Dossier_a_explorer);
/* 	tri par default: par nom
	pour trier par extension ajoutez:&tri=ext dans l'url
	et recuper avec $_GET['tri'] */
if(isset($_GET[$this->var_tri])){
	//liste les fichiers
	$liste_file=$this->Liste_files($dir,"files",$_GET[$this->var_tri]);
}	
else{
	$liste_file=$this->Liste_files($dir,"files","name");
}	//liste les dossier
	$liste_doss=$this->Liste_files($dir,"dir");
  //melange les 2 tableaux
// merci NKWolf
	if(!is_array($liste_doss)){ $liste_doss = array($liste_doss); }
        if(!is_array($liste_file)){ $liste_file = array($liste_file); }

$result = array_merge_recursive($liste_doss, $liste_file);
return $result;}
//--fin de la class
}
?>

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
39
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
11 janvier 2007

faudrais faire la même chose pour $liste_file car si il n'y que un seul fichier ca donne la même erreur mais sur $liste_file

if(!is_array($liste_doss)){ $liste_doss = array($liste_doss); }
if(!is_array($liste_file)){ $liste_file = array($liste_file); }

//melange les 2 tableaux
$result = array_merge_recursive($liste_doss, $liste_file);
return $result;

Car il est logique qui si l'un des 2 tableau n'en est pas un il ne sais pas les mélanger ;)
Messages postés
39
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
11 janvier 2007

Class_Directory.php

//melange les 2 tableaux
if(!is_array($liste_doss))
{
$liste_doss = array($liste_doss);
}
$result = array_merge_recursive($liste_doss, $liste_file);
return $result;


Voilà qui résou le problème définitivement
Messages postés
39
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
11 janvier 2007

voilà il est donc préférable soit de crée un deuxième répertoire, soit de vérifier que $liste_doss est bien un tableaux avant, j'ai pas regarder à fond, j'ai juste créer un deuxième repertoire et ca à résolu le problème
Messages postés
39
Date d'inscription
samedi 28 août 2004
Statut
Membre
Dernière intervention
11 janvier 2007

moi j'ai une erreur lorsque j'ouvre index.php
Warning: array_merge_recursive() [function.array-merge-recursive]: Argument #1 is not an array in http://....../www/listefiles/Class_Directory.php on line 110

par défaut apparament $liste_doss n'est pas considérer comme un tableau ptet le définir en array() plus tôt dans le script no ?
Messages postés
3
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
14 septembre 2006

Mis a jour des déclarations de propriétés et remplacement des ereg_replace.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.