Lister les dossiers, sous-dossiers et nombre de fichiers

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 508 fois - Téléchargée 18 fois

Contenu du snippet

Une petite source sans prétention qui pourrait très bien figurer dans les snippets mais étant une page complète, je la poste ici.

Elle vient compléter ce qui a déjà été publié dans le sujet mais va un peu plus loin...

Elle est entièrement conforme aux normes XHTML 1.1 Strict (ce n'est pas très dur avec si peu de code).

Source / Exemple :


<?php
// repertoires/extensions à ignorer dans les dossiers
$foldersListIgnore = array ('.','..');
$extListAccept = array ('php','php3','php4','htm','html');

// recuperation des dossiers
$handle=opendir('.');
$tableau='';
$nbr_files=0;

// boucle sur les éléments du dossier
while ($file = readdir($handle)) 
{
	// teste s'il s'agit d'un élément autorisé
	if (!in_array($file,$foldersListIgnore)) {
		// teste s'il s'agit d'un dossier
		if (is_dir($file)) {
			$subfolder=opendir($file);
			$ext=substr($subfolder,-3);
			// teste s'il y a des sous-dossiers et combien de sous-items il y a
			while ($subfolderContents = readdir($subfolder)) 
			{
				// teste les fichiers du sous-dossiers et leur extension
				if (!in_array($subfolderContents,$foldersListIgnore)) {
				$listing[$subfolder]=$nbr_files;
				}
				$nbr_files++;
			}
			$nbr_files =($nbr_files-2);
			// sous-résultat
			$folderContents .= '<li>'.$k.'<a href="'.$file.'/">'.$file.'</a>&nbsp;('.$nbr_files.')</li>';
			$nbr_files = 0;
		}
		// teste s'il s'agit d'un fichier
		else if (is_file($file)) {
			// extrait l'extension du fichier
			$ext = substr($file,-4);
			if (stristr($ext, '.') === FALSE) {
				$ext = $ext;
			}
			else {
				$ext = substr($ext,-3);
			}
			// vérifie si l'extension est autorisée dans le listing
			if (in_array($ext,$extListAccept)) {
				$file_name = $file;
				// sous-résultat
				$folderContents .= '<li>'.$k.'<a href="'.$file_name.'">'.$file_name.'</a></li>';
			}
		}
		// teste s'il s'agit d'un fichier
		else {
			echo 'format de fichier non reconnu';
		}
	}
}
// ferme le parcours du dossier
closedir($handle);

// teste si la liste des dossiers n'est pas nulle
if (!isset($folderContents))
	$folderContents = 'le dossier est vide';
?>
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="en" xml:lang="en">
<head>
	<title><?php echo $_SERVER['PHP_SELF'];?></title>
	<meta http-equiv="Content-Type" content="txt/html; charset=utf-8" />
</head>
<body>
	<h2><?php echo $_SERVER['PHP_SELF'];?></h2>
	<ul>
		<?php echo $folderContents;?>
	</ul>
</body>
</html>

Conclusion :


Je suis ouvert aux critiques constructives.

A voir également

Ajouter un commentaire

Commentaires

mahlaoui
Messages postés
30
Date d'inscription
lundi 10 décembre 2007
Statut
Membre
Dernière intervention
13 octobre 2008
-
Merci
Morphinof
Messages postés
261
Date d'inscription
vendredi 20 avril 2007
Statut
Membre
Dernière intervention
9 août 2013
3 -
C'est sur que ici l'intéret de la transformation est inexistant mais je voyais plutôt sa du côté exercice que utilisation.
Autant commencer par une source simple.
Il peu tout aussi bien faire autre chose mais il peu aussi essayer de voir ce que donnerai sa source version objet, c'était juste une idée de premier essai en POO ^^
Maintenant c'est sur que il y a surment mieu à faire que ca comme exercice pour débuter en POO, le mieu c'est de commencer par lire un peu et apprendre les notions de bases.
Bien évidement faire de la POO pour faire de la POO présente peu d'intérêt il faut quand même avoir un minimum de raison de le faire, si la POO présente énormément d'avantages elle à aussi ses inconvénients et il est certain que dans certains cas il n'est pas nécéssaire de passer par la.
Pour finir je suis tout à fait d'accord sur ce que disais Codefalse quand on à des outils performants à notre disposition autant les utiliser plutôt que réinventer la roue ;)
codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1 -
Je savais que parler de SPL allait te faire plaisir Malalam ;)
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Hello,

transformer cette source en objet? Pourquoi faire ? Pour du didactique, autant créer un code qui a un intérêt à être codé en POO. Celui-là n'en a pas. Et transformer ce code en objets ferait apprendre une très mauvaise chose : faire de la poo pour faire de la poo. Ce qui est une très mauvaise vision de la programmation.

@neo2k2 => attention quand même...la récursivité et l'itératif ne sont pas opposés. On peut très bien utiliser les deux au sein d'un même code. Ca a à vrai dire tout son intérêt dans un code comme le tien : j'itère pour parcourir un répertoire, je fais du récursif quand je rencontre un nouveau répertoire.

Et là ou codefalse a raison : PHP comprend de superbes extensions orientées objet pour faire ce genre de choses TRES facilement. Mais ça n'implique pas que TON code doive être en objet.
Quand je fais : $ dir = new SplDirectory; while($dir->valid()) {echo $dir->current();}
j'utilise de la poo...je n'ai pas écrit un code orienté objet. Nuance.
neo2k2
Messages postés
126
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
9 novembre 2009
1 -
Morphinof>>> c'est ce que je vais faire dans les prochains jours dès que j'aurai 10 min. Je suis d'accord avec toi, ça sera un bon exercice.

Neigedhiver>>> contrairement à ce que tu peux penser :) je ne crois pas être un débutant après 15 ans d'informatique dont 10 de programmation (dont 1 en école d'ingénieur à expliquer l'itératif AVANT la récursivité) et un ordinateur n'est pas une boîte noire pour moi mais comme tu le dis très bien, je suis parti sur de mauvaises habitudes de programmation séquentielle. Désolé, ça ce sont les réminiscences fainéantes de Pascal, vb6...

Alors voila, c'est décidé, je me (re-)met à la récursivité et la poo!

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.