begin process at 2012 05 27 19:05:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > LISTAGE RÉPERTOIRES/SOUS RÉPERTOIRES + FICHIERS

LISTAGE RÉPERTOIRES/SOUS RÉPERTOIRES + FICHIERS


 Information sur la source

Note :
8,67 / 10 - par 3 personnes
8,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Niveau :Initié Date de création :14/04/2004 Date de mise à jour :16/04/2004 16:11:30 Vu / téléchargé :9 247 / 805

Auteur : -=|[titiplusplus]|=-

Ecrire un message privé
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

On met le script dans un repertoire, on l'execute et il nous retourne les reptertoires avec leur contenu ainsi que les sous-répertoires et leur contenu ...

Source

  • <?
  • /************************************************************************/
  • /* listage.php: liste tous les répertoires/sous-répertoires et fichiers */
  • /* ==================================================================== */
  • /* */
  • /* titiplusplus titiplusplus@titiplusplus.com */
  • /* http://ebc.titiplusplus.com titi_plusplus@hotmail.com */
  • /* */
  • /* Mettez le script dans le répertoire à lister et executez le. */
  • /* Pour un répertoire exclus du serveur web (doc root) executez-le */
  • /* avec php.exe en ligne de commande : */
  • /* ex : php.exe listage.php > listage.html puis ouvrez listage.html */
  • /************************************************************************/
  • ?>
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  • <HTML>
  • <HEAD>
  • <TITLE> Listage des répertoires </TITLE>
  • </HEAD>
  • <BODY>
  • <?php
  • //classe "récursive" repertoire
  • $idclass=0;
  • class repertoire
  • {
  • //propriétés
  • var $id;//identifiant unique de la classe
  • var $chemin;//chemin du répertoire en cours
  • var $nom;//nom du répertoire en cours
  • var $listRep;//tableau des classes filles (ou sous classes)
  • var $listFiles;//tableau des noms + dates de modification des fichiers du répertoire en cours
  • //constructeur
  • function repertoire($inChemin,$inNom)
  • {
  • global $idclass;
  • $this->id=$idclass;
  • $this->chemin=$inChemin;
  • $this->nom=$inNom;
  • $idclass++;//incrémentation pour la prochaine classe
  • if($inChemin!="")//déduction du chemin complet du repertoire
  • {
  • $fullpath=$inChemin."/".$inNom;
  • }
  • else
  • {
  • $fullpath=$inNom;
  • }
  • $handle=opendir($fullpath);
  • $tmp=0;//var d'increment -> tableau de sous classes
  • $tmp2=0;//var d'increment -> tableau de fichiers
  • while ($file = readdir($handle))//création des sous classe
  • {
  • if (is_dir($fullpath."/".$file) && $file != "." && $file != "..")
  • {
  • //instanciation d'une nouvelle classe depuis cette classe
  • //j'appelle ça des classes récursives :-)
  • //tant qu'il y aura des sous répertoires des sous classes seront créees ...
  • //ex : pour rep1/rep2/rep3 => classe1->sousclasse2->sousclasse3 etc ...
  • //les unes imbriquées dans les autres :-P et accessibles avec le tableau listRep
  • $this->listRep[$tmp]=new repertoire($fullpath,$file);
  • $tmp++;
  • }
  • else if(is_file($fullpath."/".$file) && $file != "." && $file != "..")
  • {
  • clearstatcache();//effacement du cache (conseillé dans la doc ... donc on le fait :-)
  • //liste des fichiers + date modif
  • $this->listFiles[$tmp2]="<td>".$file."</td><td>".date("d/m/y H:i",fileatime($fullpath."/".$file))."</td>";
  • $tmp2++;
  • }
  • }
  • closedir($handle);
  • }
  • //fonction d'affichage en html
  • function toString()//un peu comme le toString() en java
  • {
  • echo"<table border=1 border=0 cellspacing=0 cellpadding=0>
  • <tr><td colspan=2 align=center><b><FONT SIZE=2 COLOR=red>".$this->nom."</FONT></b></td></tr>\n";
  • for($i=0;$i<count($this->listFiles);$i++)
  • {
  • echo"<tr><FONT SIZE=2 >".$this->listFiles[$i]."</FONT></tr>\n";
  • }
  • for($i=0;$i<count($this->listRep);$i++)
  • {
  • //on appelle les toString() des classes filles
  • echo"<tr><td colspan=2></td></tr><tr>
  • <td align=center valign=top><b><!-- <FONT SIZE=2 COLOR=red>".$this->nom."</FONT> --></b></td>
  • <td>";
  • $this->listRep[$i]->toString();
  • echo"</td>";
  • echo"</tr>\n";
  • }
  • echo"</table>\n";
  • }
  • }
  • //DEBUT
  • $j=0;
  • $path='.';
  • $handle=opendir($path);
  • //listage des repertoires du répertoire où se trouve le script
  • while ($file = readdir($handle))
  • {
  • if (is_dir($file) && $file != "." && $file != "..")
  • {
  • $repertoire=new repertoire($path,$file);
  • $repertoire->toString();
  • }
  • }
  • closedir($handle);
  • //FIN
  • //voilou ... simple et efficace à souhait :-P
  • ?>
  • </BODY>
  • </HTML>
<?
/************************************************************************/
/* listage.php: liste tous les répertoires/sous-répertoires et fichiers */
/* ==================================================================== */
/*                                                                      */
/* titiplusplus titiplusplus@titiplusplus.com							*/
/* http://ebc.titiplusplus.com titi_plusplus@hotmail.com				*/
/*                                                                      */
/* Mettez le script dans le répertoire à lister et executez le.			*/
/* Pour un répertoire exclus du serveur web (doc root) executez-le		*/
/* avec php.exe en ligne de commande :									*/
/* ex : php.exe listage.php > listage.html puis ouvrez listage.html		*/
/************************************************************************/
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> Listage des répertoires </TITLE>

</HEAD>
<BODY>
<?php

//classe "récursive" repertoire

$idclass=0;

class repertoire
{
	//propriétés
	var $id;//identifiant unique de la classe
	var $chemin;//chemin du répertoire en cours
	var $nom;//nom du répertoire en cours
	var $listRep;//tableau des classes filles (ou sous classes)
	var $listFiles;//tableau des noms + dates de modification des fichiers du répertoire en cours

	//constructeur
	function repertoire($inChemin,$inNom)
	{
		global $idclass;

		$this->id=$idclass;
		
		$this->chemin=$inChemin;
		$this->nom=$inNom;

		$idclass++;//incrémentation pour la prochaine classe

		if($inChemin!="")//déduction du chemin complet du repertoire
		{
			$fullpath=$inChemin."/".$inNom;
		}
		else
		{
			$fullpath=$inNom;
		}

		$handle=opendir($fullpath);

		$tmp=0;//var d'increment -> tableau de sous classes
		$tmp2=0;//var d'increment -> tableau de fichiers

		while ($file = readdir($handle))//création des sous classe
		{
			if (is_dir($fullpath."/".$file) && $file != "." && $file != "..")
			{
				//instanciation d'une nouvelle classe depuis cette classe
				//j'appelle ça des classes récursives :-)
				//tant qu'il y aura des sous répertoires des sous classes seront créees ...
				//ex : pour rep1/rep2/rep3 => classe1->sousclasse2->sousclasse3 etc ...
				//les unes imbriquées dans les autres :-P et accessibles avec le tableau listRep
				$this->listRep[$tmp]=new repertoire($fullpath,$file);
				$tmp++;
			}
			else if(is_file($fullpath."/".$file) && $file != "." && $file != "..")
			{
				clearstatcache();//effacement du cache (conseillé dans la doc ... donc on le fait :-)
				//liste des fichiers + date modif
				$this->listFiles[$tmp2]="<td>".$file."</td><td>".date("d/m/y H:i",fileatime($fullpath."/".$file))."</td>";
				$tmp2++;
			}
		}

		closedir($handle);
	}

	//fonction d'affichage en html
	function toString()//un peu comme le toString() en java
	{
		echo"<table border=1 border=0 cellspacing=0 cellpadding=0>
		<tr><td colspan=2 align=center><b><FONT SIZE=2 COLOR=red>".$this->nom."</FONT></b></td></tr>\n";
		for($i=0;$i<count($this->listFiles);$i++)
		{
			echo"<tr><FONT SIZE=2 >".$this->listFiles[$i]."</FONT></tr>\n";
		}
		for($i=0;$i<count($this->listRep);$i++)
		{
			//on appelle les toString() des classes filles
			echo"<tr><td colspan=2></td></tr><tr>
				<td align=center valign=top><b><!-- <FONT SIZE=2 COLOR=red>".$this->nom."</FONT> --></b></td>
				<td>";
			$this->listRep[$i]->toString();
			echo"</td>";
			echo"</tr>\n";
		}
		echo"</table>\n";
	}
}

//DEBUT

$j=0;
$path='.';

$handle=opendir($path);
//listage des repertoires du répertoire où se trouve le script
while ($file = readdir($handle))
{
    if (is_dir($file) && $file != "." && $file != "..")
	{
		$repertoire=new repertoire($path,$file);
		$repertoire->toString();
    }
}

closedir($handle);

//FIN

//voilou ... simple et efficace à souhait :-P
?>
</BODY>
</HTML>

 Conclusion

On pourrait afficher plus d'infos mais bon ... le but de ce script n'est pas là ... il s'agissait de travailler un peut les objets :-P

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture ANNUAIRE SIMPLE ET RAPIDE D'UTILISATION
Source avec Zip GALERIE COMPLETEMENT AUTONOME

 Sources de la même categorie

SUPPRESSION AUTOMATIQUE DES FICHIERS RAW ORPHELINS APRÈS UN ... par malokaff
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151

Commentaires et avis

Commentaire de vedder1896 le 15/04/2004 00:17:52

toi t un KING en ****!
enfin d'la prog pur et propre comme on l'aime !
sans rancune ! = )

Commentaire de vedder1896 le 15/04/2004 01:09:46

je vois pas comment faire afficher la grosseur des fichiers en question...tu sais comment ??

ex:             round((($fullpath."/".$file)) / (1&lt;&lt;20)), 2)

Commentaire de Kirua le 15/04/2004 03:57:11

c'est une méthode intéressante de récursivité ^^

Commentaire de -=|[titiplusplus]|=- le 15/04/2004 08:51:50

Merci à tous pour vos commentaires :-)

Pour répondre à Vedder le plus simple pour récupérer la taille d'un fichier est la fonction filesize($fullpathstring);

Voilou ...

Faudrait que je commente mes sources les plus intéressantes pour les mettre sur le site, c'est assez sympa je trouve ce mode d'échange.

Commentaire de vedder1896 le 15/04/2004 16:20:16

une autre petite question..après avoir fait afficher chaque fichier dans chacun des répertoires.. j'ai fait sortir le fichier en un lien hypertexte
"&lt;a href=...&gt; mais si mon répertoire ou le fichier a des espaces et bien il le "trim"... ex: daemon tool.exe s'affiche daemon tout simplement qui brise alors mon lien..

t'as une idée ??
merci

Commentaire de -=|[titiplusplus]|=- le 16/04/2004 08:37:07

Je viens de tester avec 2 fichiers html et ca marche.
Mais cette question s'aparente plus au langage html que php ... moi je vais te donner une réponse en php :
Analyse le nom de ton fichier, et si il y a un espace, renome-le en supprimant l'espace ou en le remplacant par un underscore :-)

Commentaire de vedder1896 le 19/04/2004 01:19:25

salut ! j'avais déja pensé à cette alternative mais j'ai pas vraiment le gout d'me tapper "l'analyse" de tout les noms de fichier dont je veux partager.. :) ( + de 2000 ) merci quand même.. je vais continuer à chercher ! ciao

Commentaire de RazielReaver le 01/09/2004 08:17:25

Un truc qui me chagrine pourquoi mettre un id a la classe qui s'incrémente a chaque utilisation ?

Commentaire de -=|[titiplusplus]|=- le 20/11/2004 15:43:25

une habitude ... ca te permet en quelque sorte d'avoir un index pour les tri les recherche etc .... tout comme une table d'une base de données en fait.

Ici elle ne sert peut etre à rien mais bon ^^

Commentaire de Evangun le 20/02/2005 15:40:15

Joli code!
J'ai ajouté ceci pour que les fichiers soient aussi des liens (la fonction marche avec les espaces et les accents utilisés en français principalement, pour le reste faîtes des recherches :^) :

A un moment vous allez remplacer:

//liste des fichiers + date modif
                $this->listFiles[$tmp2]="<td>".$file."</td><td>".date("d/m/y H:i",fileatime($fullpath."/".$file))."</td>";


Par:

//liste des fichiers + date modif
function accent($mot)
{
for($i=0;$i<strlen($mot);$i++)
{
$car=substr($mot,$i,1);
$val=ord($car);
if ($val==192){$car='%c0';}
if ($val==194){$car='%c2';}
if ($val==199){$car='%c7';}
if ($val==212){$car='%d4';}
if ($val>=224){$car='%e0';}
if ($val>=226){$car='%e2';}
if ($val==231){$car='%e7';}
if ($val==232){$car='%e8';}
if ($val==233){$car='%e9';}
if ($val==234){$car='%ea';}
if ($val==235){$car='%eb';}
if ($val==238){$car='%ee';}
if ($val==239){$car='%ef';}
if ($val==241){$car='%f1';}
if ($val==244){$car='%f4';}
if ($val==246){$car='%f6';}
if ($val==249){$car='%f9';}
if ($val==251){$car='%fb';}
if ($val==252){$car='%fc';}
$retour.=$car;
}
return($retour);
}

$flpth = accent($fullpath);
$faile = accent($file);
$this->listFiles[$tmp2]='<td><a href="'.$flpth.'/'.$faile.'">'.$file.'</a><td>';


Et voilà, ça doit marcher!!
Euhh par contre, pour mon site, j'ai supprimé l'option qui montre la taille des fichiers et j'ai la flemme de la remettre dans mon code, mais en respectant la ponctuation vous n'aurez pas de mal à la rétablir je pense!


PS pour Vedder: ton problème d'espace vient de ce qu'en php, tu peux te permettre d'écrire:
echo '<td width=250>';     à la place de
echo '<width="250">';
mais pas :
echo '<a href=machin truc.html>';     à la place de
echo '<a href="machin truc.html">';
D'où la rectification des guillemets dans mon code.
Si vous vous demandez à quoi sert ma fonction "accent", enlevez-là vous verrez ;^)

Bonne prog à tous :)
Evan

Commentaire de Evangun le 22/02/2005 23:57:20

Hum ça marchera mieux si vous sortez la fonction de la boucle lol

Commentaire de neouf le 17/03/2005 10:53:55

if (is_dir($path.'/'.$file) && $path.'/'.$file != "." && $path.'/'.$file != "..")

avec ca , un meilleur fonctionnement est visible avec des chemins unix,
et voilou :)

Commentaire de footixgh le 05/06/2005 20:06:55

Bonjour, Avec votre système, un nouveau tableau est créé dans un tableau pour les sous-dossiers par exemple.
J'ai adapté votre code pour que tout s'affiche dans un seul tableau afin d'en faire un menu automatique.
Mais j'aimerais décaler les sous répertoires. Comment faire? Comment savoir si ce qui va être écris est un sous répertoire ou un répertoire?

Merciiiii

Commentaire de Evangun le 06/06/2005 19:53:04

Hé bien si tu veux décaler les sous-répertoires, laisse les tableaux comme ils sont et décale ceux des sous-répertoires!?

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales