8722 sujets

Développement web côté serveur, CMS

Bonjour à Tous.

Je ne suis pas tres feru en PHP.

mon probleme:

Lister le contenu d'un repertore mais afficher les sous-dossiers avant les fichiers au lieu de l' affichage Alphabetique par defaut d'Apache.

Je ne sais pas si j'ai été assez clair.

En vous Remerciant par avance pour l'aide que vous pourrez m'apporter
Bonjour,
il faut lire le contenu du répertoire et stocker les éléments lus dans deux tableaux (array) : $tb_directories et $tb_files selon que ce sont des répertoires ou des fichiers.
Ensuite on affiche le contenu des deux tableaux en question (par exemple avec un boucle foreach), avec le $tb_directories en premier : la liste comprend les répertoires, puis les fichiers

$dir = 'un_repertoire';
if ( is_dir($dir) )  {
	if ( $dh = opendir($dir) ) {
		while ( ($element = readdir($dh)) !== false){{
				if (	($element != '_vti_cnf')	&
					($element != '.')		&
					($element != '..')		&
					($element != '.DS_Store')	){
						
						if (is_dir($dir.'/'.$element))
						{
							$tb_directories[] = $element;	
						}
						else
						{
							$tb_files[] = $element;	
						}
					}
				}	
			}
		}
	}

foreach($tb_directories AS $value) echo $value . '<br>';
foreach($tb_files AS $value) echo $value . '<br>';



Le code est un peu vieillot ( ce n'est pas du PHP récent) mais fonctionne ...
La fonction is_dir() demande le chemin complet de l'élément à tester, is_dir($element) renverra toujours false, (is_dir($dir.'/'.$element) renverra un résultat juste.
Dans l'exemple sont exclus les fichiers invisibles et autres fichiers qu'on ne veut généralement pas afficher.
Modérateur
Bonjour,
Il existe aussi la fonction [b]glob()[/i]. Elle est moins véloce que la solution opendir() mais associée au flag GLOB_ONLYDIR, elle est très pratique pour lister des dossiers (ne demande que très peu de lignes de code).
La page ressource sur le manuel php : http://php.net/manual/fr/function.glob.php
Modifié par jojaba (16 Aug 2016 - 04:34)
On peut aussi passer par scandir :

function listDir($dir) {

	if (is_dir($dir)) {
	
		foreach(array_diff(scandir($dir), array('.', '..')) as $v)
			if (is_dir("$dir/$v"))
				$folders[] = $v;
			else
				$files[] = $v;

		return array_merge($folders, $files);

	}

}
	
listDir('chemin');
Merci pour vos reponses que je vais tester dans les minutes qui suivent et en vous priant de bien vouloir m'excuser pour le retard du à un accident de moto le 15 Aout au soir, suis sorti de clinique hier aprem