0/5 (8 avis)
Snippet vu 23 741 fois - Téléchargée 33 fois
<? function listRep ($repertoire, $typefichier){ //Initialisation des variables $result; //tableau de resultat $cptdossier=0; //cpt pour le tab des dossiers $cptfichier=0; //cpt pour le tab des fichiers $tab_fichier; //tableau de fichiers $tab_dossier; //tableau des dossiers $estfichier; //booleen pour savoir si c'est un fichier $estdossier; //booleen pour savoir si c'est un dossier // test si c'est un repertoire if (!(is_dir($repertoire))){ print("Ce n'est pas un repertoire"); exit ; } //ouverture du dossier $handle=opendir('.'); //lecture du dossier while ($fichier = readdir($handle)){ if ($fichier != "." && $fichier != ".."){ //Determination du type $estfichier = is_file($repertoire.$fichier); $estdossier = is_dir($repertoire.$fichier); //recup des éléments dans les tableaux respectifs if ($estdossier==true){ $tab_dossier[$cptdossier] = $fichier; $cptdossier++; next; } if ($estfichier==true){ $tab_fichier[$cptfichier] = $fichier; $cptfichier++; next; } } } //mise en place des resultats // si dossier if ($typefichier=="dossier"){ $result = $tab_dossier; } //si fichier if ($typefichier=="fichier"){ $result = $tab_fichier; } //tous les types if (($typefichier=="all")||($typefichier=="")){ for ($i=0; $i<$cptdossier+1; $i++){ $result[$i] = $tab_dossier[$i]; } for ($j=0; $j<$cptfichier+1; $j++){ $i = $cptdossier+$j+2; $result[$i] = $tab_fichier[$j]; } }else{ //extension spécifiées $i=0; for ($j=0; $j<$cptfichier+1; $j++){ $extension = explode(".", $tab_fichier[$j]); $valmax = count($extension)-1; if ($typefichier==$extension[$valmax]){ $result[$i] = $tab_fichier[$j]; $i++; } } } //fermeture du dossier closedir($handle); return ($result); } ?>
7 déc. 2006 à 21:16
Parce que glob, c'est glop :)
--------------------------------------------
$array = glob("./classes/*.php");
if ($array)
{
foreach ($array as $iterator) {
//do something here;
}
}
--------------------------------------------
1 oct. 2004 à 20:52
11 avril 2003 à 23:40
Voici une version adaptatée qui fonctionne et qui me semble plus efficace (pour n fichier je ne fais que n itérations).
<?
# liste le contenu d'un répertoire
# $typefichier=all: liste tous les répertoires et les fichiers
# $typefichier=fichier: liste tous les fichiers
# $typefichier=dossier: liste tous les dossiers
#
function listRep ($repertoire, $typefichier){
//Initialisation des variables
$result; //tableau de resultat
//valeur all par défaut
if ($typefichier=="")
$typefichier="all";
// test si c'est un repertoire
if (!(is_dir($repertoire)))
die("Ce n'est pas un répertoire");
//ouverture du dossier
$handle=opendir($repertoire);
$i=0;
//lecture du dossier
while ($fichier = readdir($handle)){
if ($fichier != "." && $fichier != ".."){
if (is_dir($repertoire.$fichier) && ($typefichier=="all" || $typefichier=="dossier")){
$result[$i++] = $fichier;
}
elseif (is_file($repertoire.$fichier)){
$tmp = pathinfo($fichier) ;
$extension = $tmp['extension'] ;
if ($typefichier=="all" || $typefichier=="fichier" || $typefichier==$extension) {
$result[$i++] = $fichier;
}
}
}
}
//fermeture du dossier
closedir($handle);
return ($result);
}
?>
3 févr. 2003 à 12:00
avec serveur unix
exec("find path -type f -exec basename {} ;",$list);
5 nov. 2002 à 08:23
Cordialement,
Stan.
--------------------
1) En une seule ligne... die($message) est fait pour ça ! ;-)
// test si c'est un repertoire
if (!(is_dir($repertoire))){
{
die("Ce n'est pas un repertoire");
}
--------------------
1) pas la peine de passer par des variables intermédiaires pour les tests... ils peuvent directement aller des les IF()
2) 'next' inutiles
3) is_dir/is_file renvoient TRUE ou FALSE; si tu testes is_dir($machin) TRUE et que is_dir($machin) renvoie TRUE, ton test revient à demander si TRUE TRUE (donc inutile) : tu fais juste un IF(is_dir($machin))
Si tu veux vraiment passer par une variable intermédiaire, tu fais
$temporaire = is_dir($machin) ;
IF($temporaire) ...
4) tu peux incrémenter ton compteur directement dans le passage en index du tableau... et hop, une ligne de gagnée !
//lecture du dossier
while ($fichier = readdir($handle))
{
if ($fichier != "." && $fichier != "..")
{
//recup des éléments dans les tableaux respectifs
if (is_dir($repertoire.$fichier))
{
$tab_dossier[$cptdossier++] = $fichier;
}
if (is_file($repertoire.$fichier))
{
$tab_fichier[$cptfichier++] = $fichier;
}
} // fin while
--------------------
1) Tu peux renvoyer directement le resultat depuis ce test et sortir de ta fonction (ça évite tous les tests suivants qui font perdre du temps d'execution et qui seront de toutes façon FAUX ;-))
//mise en place des resultats
// si dossier
if ($typefichier=="dossier")
{
RETURN $tab_dossier ;
}
//si fichier
if ($typefichier=="fichier")
{
RETURN $tab_fichier ;
}
--------------------
1) Pour l'extension, y'a encore plus simple : PHP a prévu une fonction native 'pathinfo($fichier)' qui renvoie un tableau associatif dont l'index 'extension' contient l'extension de $fichier (donc plus rapide, surtout si il y a beaucoup de fichiers dans ton répertoire)
$tableau = pathinfo($file) ;
$extension = $tableau['extension'] ;
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.