Explorateur de dossiers récursif

0/5 (11 avis)

Vue 16 530 fois - Téléchargée 1 986 fois

Description

Juste un explorateur de dossiers récursif que je viens de faire en vue de coder un "File manager" complet.
Le code me paraît assez propre, ceci dit, je pense avoir fait un peu de bricolage dans la balise [A AMELIORER].
Les deux instructions :
chdir($rep) ;
echo('<b>'.getcwd().'\\</b></br>') ;
ne sont pas indispensables mais c'est mieux si vous voulez avoir un chemin courant correct. Il faudrait reformater la variable $rep à chaque appel je pense. Je crois qu'il y a une fonction qui peut le faire mais je ne la trouve pas.

Essayez donc en commentant ces instructions pour comprendre ce dont je parle et faire cela d'une façon plus pro.

J'attend vos commentaires constructifs.

ps : Première source en php depuis que je fais du C, d'où la raison de la "propreté" (selon moi !)

Source / Exemple :


<?php

function liste_rep($rep)
{
	if (is_dir($rep) == true)
	{
		// $rep est un répertoire valide
		
		//[A AMELIORER]
		// on ajoute l'antislash
		if ($rep[strlen($rep)-1] !=  '\\')
		{
			$rep = $rep.'\\' ;
		}
		
		// on dit dans quel répertoire on se situe
		chdir($rep) ;
		echo('<b>'.getcwd().'\\</b></br>') ;
		// AMELIORER
		
		if (($pt_rep = opendir($rep)) != false)
		{
			// $rep a été ouvert
			
			// scan des répertoires
			while (($fichier = readdir($pt_rep)) != false)
			{
				// on lit le fichier courant
				
				if ($fichier != '.')
				// on ignore le répertoire courant
				{
					if (is_dir($rep.$fichier) == true)
					{
						echo('+<a href="index.php?chemin='.$rep.$fichier.'\\">'.$fichier.'</a></br>') ;
					}
				}
			}
			
			// on retourne au premier fichier
			rewinddir($pt_rep) ;
			
			// scan des fichiers
			while (($fichier = readdir($pt_rep)) != false)
			{
				// on lit le fichier courant
				
				if (is_dir($rep.$fichier) == false)
				{
					echo('-'.$fichier.'</br>') ;
				}
			}
			
			// on ferme le répertoire qui a été ouvert
			closedir($pt_rep) ;
		}
	}
}

  
?>

<html>
<head>
	<title>Explorateur de dossiers récursif</title>
</head>
<body>
	
	
	<?php
		if (isset($_GET['chemin']) == false)
		{
			$dossier = 'c:\\Program Files\\' ;
		}
		else
		{
			$dossier = $_GET['chemin'] ;
		}
		
		liste_rep($dossier) ;
	?>
	
	
</body>
</html>

Codes Sources

A voir également

Ajouter un commentaire Commentaires
nikoland Messages postés 47 Date d'inscription samedi 17 décembre 2005 Statut Membre Dernière intervention 14 décembre 2006
31 mai 2006 à 22:52
J'en rajoute une couche, ça résoud le problème de l'url à rallonge mais ça fait plus que bricolage !

Il faut remplacer les deux instructions dont je parlais par :
chdir($rep) ;
$rep = getcwd().'\\' ;
echo(''.getcwd().'\\') ;

(Oui, j'aurai pu simplement dire de rajouter une instruction entre les deux...)
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
1 juin 2006 à 16:48
Salut...

C'est plutot bien... .. . :o)

Tu peux faire...

if (is_dir($rep))

à le place de...

if (is_dir($rep) == true)

is_dir renvoyant toujours true ou false pas besoin de comparason typée (===)... pareil pour...

if (($pt_rep = opendir($rep)) != false)

if (!$pt_rep = opendir($rep))

suffit... mais c'est pas bien grave ça ne change rien...

Par contre pour les deux boucles mieux vaut faire une comparaison typée...

while (false !($fichier readdir($pt_rep)))

remplacer...

if ($rep[strlen($rep)-1] != '\\')
{
$rep = $rep.'\\' ;
}

Par

if(substr($rep,-1) != DIRECTORY_SEPARATOR)
$rep .= DIRECTORY_SEPARATOR;

remplacer...

if ($fichier != '.')
// on ignore le répertoire courant
{
if (is_dir($rep.$fichier) == true)
{

Par...

if ($fichier != '.' && $fichier != '..' && is_dir($rep.$fichier))
{


Plutot que de faire deux boucles tu peux utiliser la récursivité...

while (false !($fichier readdir($pt_rep)))
{
if ($fichier != '.' && $fichier != '..')
{
if(is_dir($rep.$fichier))
{
echo '+ [index.php?chemin='.$rep.$fichier.DIRECTORY_SEPARATOR.' '.$fichier.']
';
liste_rep($rep.$fichier);
}
else echo '-'.$fichier.'
';
}
}

Voili voilou... .. .

@ tchaOo°
nikoland Messages postés 47 Date d'inscription samedi 17 décembre 2005 Statut Membre Dernière intervention 14 décembre 2006
1 juin 2006 à 16:53
Je te remercie pour tes conseils.

En ce qui concerne les tests genre "==true", je suis au courant, je changerai ceci plus tard pour que ce soit plus propre. Je les ai mis car j'ai changé plusieurs fois les conditions...

Je suis actuellement en train de faire un affichage des résultats dans un tableau xhtml et je suis assez fier du résultat. Si ça intéresse certains, je pourrais également le poster (en prenant soin de l'adapter avec les conseils de kankrelune).
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
1 juin 2006 à 17:40
La remarque sur le "== true" c'est plus du détail... le résultat est le même c'est juste que ça fait du code en moins à taper... lol... .. . ;o)

@ tchaOo°
nikoland Messages postés 47 Date d'inscription samedi 17 décembre 2005 Statut Membre Dernière intervention 14 décembre 2006
1 juin 2006 à 17:51
non mais moi je préfère aussi sans les "==true"...
j'aime bien avoir tout mes codes formatés de la même façon, donc je les retirerai après.

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.