[PHP]Lister les fichiers de plusieurs dossier

Fermé
Dev - 18 févr. 2008 à 17:46
 jaycreation - 31 août 2010 à 12:29
Bonjour à tous,
Je viens demander votre aide car je n'ai pas trouvé comment réaliser une arborescence concernant un ou plusieurs dossiers.
Dans un dossier, il y a un ou plusieurs sous dossiers qui eux même contiennent des fichiers. J'aimerais pouvoir afficher une arborescence un peu comme windows : que lorsque l'on clique sur un dossier, celui ci affiche les sous dossiers et fichiers qu'il contient ainsi desuite.

J'ai trouvé la fonction scandir avec laquelle j'ai pu récupérer quelques fichier mais cela ne me convient guerre...
je vous montre mon code :

$dir = "../Interface_admin";
$dh = opendir($dir);
while (false !== ($filename = readdir($dh))) {
$files[] = $filename;
}

sort($files);

print_r($files);

rsort($files);

print_r($files);

Comme résultat j'obtiens :
Array ( [0] => . [1] => .. [2] => .htaccess [3] => .htpasswd [4] => ajout_cli.php [5] => ajout_news.php [6] => ajout_news_log.php [7] => ajout_news_modif.php [8] => arborescence.php [9] => connexion.php [10] => courrier.php [11] => courrier2.php [12] => courrier2bad.php [13] => essaidate.php [14] => images [15] => interface.html [16] => modif_info_cli.php [17] => modif_news.php [18] => save [19] => suppr_cli.php [20] => suppr_news.php [21] => test.php [22] => test2.php [23] => test_maj.php [24] => test_marque_IDConcess.php [25] => test_trait_ajout_log.php [26] => trait_ajout_cli.php [27] => trait_ajout_news_log.php [28] => trait_ajout_news_log2.php [29] => trait_ajout_news_tar.php [30] => traitement_modif_info_cli.php [31] => traitement_modif_news.php [32] => valid_suppr_cli.php [33] => valid_suppr_news.php [34] => valid_trait_cli.php [35] => valid_trait_news.php ) Array ( [0] => valid_trait_news.php [1] => valid_trait_cli.php [2] => valid_suppr_news.php [3] => valid_suppr_cli.php [4] => traitement_modif_news.php [5] => traitement_modif_info_cli.php [6] => trait_ajout_news_tar.php [7] => trait_ajout_news_log2.php [8] => trait_ajout_news_log.php [9] => trait_ajout_cli.php [10] => test_trait_ajout_log.php [11] => test_marque_IDConcess.php [12] => test_maj.php [13] => test2.php [14] => test.php [15] => suppr_news.php [16] => suppr_cli.php [17] => save [18] => modif_news.php [19] => modif_info_cli.php [20] => interface.html [21] => images [22] => essaidate.php [23] => courrier2bad.php [24] => courrier2.php [25] => courrier.php [26] => connexion.php [27] => arborescence.php [28] => ajout_news_modif.php [29] => ajout_news_log.php [30] => ajout_news.php [31] => ajout_cli.php [32] => .htpasswd [33] => .htaccess [34] => .. [35] => . )

Si vous pouviez m'aider à obtenir une page qui ressemble à:

- Images
-image1.jpg
-image2.jpg

-Test
-test1.php
-test2.php

Je vous en serais très reconnaissant...

Je vous remercie par avance, n'hésitez pas à me faire part de vos suggestions.

Bonne continuation
A voir également:

4 réponses

Thamior Messages postés 264 Date d'inscription lundi 11 février 2008 Statut Membre Dernière intervention 18 mars 2014 47
18 févr. 2008 à 18:28
Bonjour,

J'ai eu aussi besoin de naviguer sur mon ftp avec en passant par une appli PHP.

Je te propose le script dont je me suis servis et qui est très bien :

<style type="text/css">
<!--
body,.mybox {
font-family:'Lucida console';
font-size:12px;
color:#000000;
background:#DDDDDD;
}
.mybox {
background:#FFFFFF;
width:100px;
}
-->
</style>
<?php
if(isset($page) ||empty($page))
{
//==========================================================//
// TAILLE DU DOSSIER (ET SOUS-DOSSIERS)
//==========================================================//
function dirsize($path,$recursive=true){
$result=0;
if(!@is_dir($path) || !@is_readable($path)) return -1;
$fd=@dir($path); if(!$fd) return -1;
$tmo=time();
while($file=$fd->read()){
if(substr($file,-1,1)!='.'){
if(@is_dir($path.'/'.$file.'/'))
$result+=$recursive?dirSize($path.'/'.$file.'/'):0;
else $result+=filesize($path.'/'.$file);
}
if(time()-$tmo>=2){ // TimeOut de 2 secondes
$fd->close();
return -1;
}
}
$fd->close();
return $result;
}


//==========================================================//
// UNITE DE LA TAILLE
//==========================================================//
function getfilesize($size){
if(!isset($size) || $size<0) return 'not found';
$units=array('',' Ko',' Mo',' Go',' To');
for($i=0;$size>1024;$i++) $size/=1024;
return round($size,2).$units[$i];
}


//==========================================================//
// TRAITEMENT DU POST
//==========================================================//
$lstd=Array(); // Tableau des dossiers
$lstf=Array(); // Tableau des fichiers
$lsts=Array(); // Tailles des fichiers
$myd=@$_POST['myd']; // Sélection du dossier
$myf=@$_POST['myf']; // Sélection du(des) fichier(s)

if((substr($myd,-1,1)=='.')&&(substr($myd,-2,2)!='..')) $myd='';
@chdir($myd);
echo '<b>'.getcwd().'</b> ('.@getfilesize(dirsize(getcwd())).')<br/>';
if($handle=@opendir(getcwd()))
while(($file=@readdir($handle))!==false)
if((@is_dir($file))||($file=='..')){
$lstd[]=getcwd().'/'.$file;
}else{
$lstf[]=$file;
$lsts[]=@getfilesize(filesize(getcwd().'/'.$file));
}
@closedir($handle);


//==========================================================//
// FORMULAIRE HTML
//==========================================================//
echo '<form name="mybrowse" method="post">';


echo '<select name="myd" size="20" class="mybox" '.
'onDblClick="mybrowse.submit();">';
if(strlen(getcwd())<4){
if('A:\\'!=getcwd())
echo '<option value="A:">A:</option>';
for($x=2;$x<26;$x++){
$unit=chr(65+$x).':';
if(@is_dir($unit) && $unit.'\\'!=getcwd())
echo '<option value="'.$unit.'">'.$unit.'</option>';
}
}
for($x=0;$x<count($lstd);$x++)
echo '<option value="'.$lstd[$x].'">'.basename($lstd[$x]).'</option>';
echo '</select>';


echo '<select name="myf[]" size="20" class="mybox" '.
'style="width:300px;" multiple>';
for($x=0;$x<count($lstf);$x++)
echo '<option value="'.$lstf[$x].'">'.$lstf[$x].' ('.$lsts[$x].')</option>';
echo '</select>';


echo '<br/>'.
'<noscript>'.
'<input type="submit" value=" LISTER " class="mybox"/>'.
'</noscript>'.
'</form>';


?>

Thamior.
1
Je te remercie Tharmior.
Je vais me pencher dessus desuite :)
0
Ton code marche à merveille mais sais tu comment je pourrais faire pour, en double cliquant sur un fichier, inscrire son nom à la suite du chemin qui s'affiche à l'aide de " echo '<b>'.getcwd().'</b> ('.@getfilesize(dirsize(getcwd())).')<br/>'; "

Merci d'avance
0
Bonjour,
Il y a beaucoup de script que tu peux télécharger directement pour faire ça.
je t'en propose un avec une espace d'administration :
http://blog.jaycreation.net/post/Arborescence-de-fichiers-en-PHP-AJAX-avec-administration
0