tuxbubling Posté(e) le 10 mars 2006 Partager Posté(e) le 10 mars 2006 Bonjour à tous, je recherche un script php, me faisant un listing répertoire, avec taille des fichiers, date, et une icone par type. Un exemple de ce que je recherche: http://ftp.gnome.org/pub/GNOME/sources/dasher/ ^ Exactement ca :) Si quelqu'un à une idée? (J'ai regardé un peu du coté de php explorer ou qxplorer, mais c'est beaucoup trop lourd pour l'utilisation que je veut) D'avance merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 10 mars 2006 Partager Posté(e) le 10 mars 2006 Ben, il suffit que tu ne mettes pas de index.html, index.php ou autre fichier "index" déclaré dans ton Apache pour que celui-ci te génère automatiquement une liste des fichiers présents dans le répertoire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuxbubling Posté(e) le 10 mars 2006 Auteur Partager Posté(e) le 10 mars 2006 Ben, il suffit que tu ne mettes pas de index.html, index.php ou autre fichier "index" déclaré dans ton Apache pour que celui-ci te génère automatiquement une liste des fichiers présents dans le répertoire. J'utilise lighttpd, qui as une fonction de listing rep, ce que je voulais justement c'est l'agrémenter d'icones etc... Lien vers le commentaire Partager sur d’autres sites More sharing options...
gvosnet Posté(e) le 10 mars 2006 Partager Posté(e) le 10 mars 2006 Ben, il suffit que tu ne mettes pas de index.html, index.php ou autre fichier "index" déclaré dans ton Apache pour que celui-ci te génère automatiquement une liste des fichiers présents dans le répertoire. Ca ne fonctionne pas sur les comptes 1and1. Du coup, je serais aussi intéressé par un truc qui permette de faire ça... Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuxbubling Posté(e) le 10 mars 2006 Auteur Partager Posté(e) le 10 mars 2006 Ben, il suffit que tu ne mettes pas de index.html, index.php ou autre fichier "index" déclaré dans ton Apache pour que celui-ci te génère automatiquement une liste des fichiers présents dans le répertoire. Ca ne fonctionne pas sur les comptes 1and1. Du coup, je serais aussi intéressé par un truc qui permette de faire ça... J'ai trouvé quelques bouts de code PHP sur le net, je connais pas grand chose en PHP, donc j'essaye d'adapter ca ce week et je ferais tourner si ca marche Lien vers le commentaire Partager sur d’autres sites More sharing options...
gvosnet Posté(e) le 10 mars 2006 Partager Posté(e) le 10 mars 2006 Ok, merci. Je suis le topic...(du verbe suivre, pas du verbe être...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuxbubling Posté(e) le 11 mars 2006 Auteur Partager Posté(e) le 11 mars 2006 Alors je suis parti de ceci: <? $list_ignore = array ('.','..','exemples','phpmyadmin','sqlitemanager'); $handle=opendir("."); $i = 0; while ($file = readdir($handle)) { if (is_file($file) && !in_array($file,$list_ignore)) { $tab[$i]=$file; $i++; } } closedir($handle); if ($i) foreach ($tab as $rep) { echo ('<tr><td width="100"><a href="'.$rep.'"><img src="icon.gif" border="0"> '.$rep.'</a></td><td><i><a target="_blank" href="c:/#################/'.$rep.' "><font color="#000000">Telecharger</font></a></i></td></tr>'); } else echo "<tr><td>$txt_no_projet</td></tr>"; ?> Trouvé je ne sais plus trop ou ^^ Et voila ce que j'en ai fait: <?php /** Vars */ $icondir = "http://myhost/icons"; /** Fonction renvoyant la taille du fichier */ function size_of_file($file) { $file_size = filesize($file); if ($file_size >= 1048576) { $filesize = number_format(($file_size / 1048576),2) . " MB"; } elseif ($file_size >= 1024) { $filesize = number_format(($file_size / 1024),2) . " KB"; } elseif ($file_size >= 0) { $filesize = $file_size . " bytes"; } else { $filesize = "0 bytes"; } return $filesize; } /** Start */ $list_ignore = array ('.','directory.php'); $handle = opendir("."); $h = 0; $i = 0; while ($file = readdir($handle)) { if (is_dir($file) && !in_array($file,$list_ignore)) { $dir[$h] = $file; $h++; } if (is_file($file) && !in_array($file,$list_ignore)) { $tab[$i] = $file; $i++; } } closedir($handle); /** Html header */ echo ('<html><head>'); echo ('<title>Section download</title>'); echo ('<link rel="stylesheet" type="text/css" href="'.$icondir.'/style.css">'); echo ('<link rel="icon" type="image/png" href="'.$icondir.'/site.png">'); echo ('</head>'); /** Body */ echo ('<body>'); if ($h) foreach ($dir as $rep) { $size = "-"; if ( $rep == '..') { echo ('<table border=0><tr><td width="32"><center><a href="'.$rep.'"><img src="'.$icondir.'/parent.png" border="0"></a></center></td><td width="500"><a href="'.$rep.'">Répertoire Parent</a></td></tr></table>'); echo ('<br>'); } else { echo ('<table border=0><tr><td width="32"><center><a href="'.$rep.'"><img src="'.$icondir.'/dir.png" border="0"></a></center></td><td width="500"><a href="'.$rep.'">'.$rep.'</a></td><td width="100" align="right">'.$size.'</td></tr></table>'); } } if ($i) foreach ($tab as $rep) { $size = size_of_file($rep); if ( strstr($rep, ".tar.bz2") || strstr($rep, ".tar.gz") || strstr($rep, ".tar.zip") ) { $icon = "archive.png"; } elseif ( strstr($rep, ".wav") || strstr($rep, ".mp3") || strstr($rep, ".ogg") || strstr($rep, ".flac") ) { $icon = "audio.png"; } elseif ( strstr($rep, ".gif") || strstr($rep, ".jpg") || strstr($rep, ".png") || strstr($rep, ".xcf") ) { $icon = "image.png"; } else { $icon = "file.png"; } echo ('<table border=0><tr><td width="32"><center><a href="'.$rep.'"><img src="'.$icondir.'/'.$icon.'" border="0"></a></center></td><td width="500"><a href="'.$rep.'">'.$rep.'</a></td><td width="100" align="right">'.$size.'</td></tr></table>'); } /** footer */ echo ('</body>'); echo ('</html>'); ?> Et voila un apercu du rendu http://tuxbubling.hopto.org/data/ Plutot fier du résultat, ca fonctionne très bien Toutefois je suis pas sur que le code soit très propre, donc toute les corrections sont les bienvenues Lien vers le commentaire Partager sur d’autres sites More sharing options...
Quarky Posté(e) le 11 mars 2006 Partager Posté(e) le 11 mars 2006 Et sur ton exemple, les rép t1, t2 et t3 sont bien vides ??? ou est-ce l'affichage qui ne scan pas le contenu ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
.BöD. Posté(e) le 11 mars 2006 Partager Posté(e) le 11 mars 2006 Intéressant, je cherchais justement un truc de ce genre... merci... Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuxbubling Posté(e) le 12 mars 2006 Auteur Partager Posté(e) le 12 mars 2006 Et sur ton exemple, les rép t1, t2 et t3 sont bien vides ??? ou est-ce l'affichage qui ne scan pas le contenu ? Oui oui sont bien vides Lien vers le commentaire Partager sur d’autres sites More sharing options...
Quarky Posté(e) le 12 mars 2006 Partager Posté(e) le 12 mars 2006 Et ben c'est la classe alors ... Après c'est juste une question de format : faire en sorte que tous les types de fichiers les plus communs auront un icône particulier. Bravo Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuxbubling Posté(e) le 12 mars 2006 Auteur Partager Posté(e) le 12 mars 2006 Allé MAJ utilisant PECL-fileinfo pour déterminer le type de fichier et l'icone, avec ajout de la date de modif du fichier :) <?php /** Vars */ $icondir = "http://myhost/icons"; /** Fonction renvoyant la taille du fichier */ function size_of_file($file) { $file_size = filesize($file); if ($file_size >= 1048576) { $filesize = number_format(($file_size / 1048576),2) . " MB"; } elseif ($file_size >= 1024) { $filesize = number_format(($file_size / 1024),2) . " KB"; } elseif ($file_size >= 0) { $filesize = $file_size . " bytes"; } else { $filesize = "0 bytes"; } return $filesize; } /** Fonction renvoyant le type du fichier */ function type_of_file($file) { $res = finfo_open(FILEINFO_MIME); $files = glob("*"); $type_of_file = finfo_file($res, $file); finfo_close($res); /** Détermine l'icone selon le type */ if ( strstr($type_of_file, "text") ) { $icon = "text.png"; } elseif ( strstr($type_of_file, "image") ) { $icon = "image.png"; } elseif ( strstr($type_of_file, "video") ) { $icon = "video.png"; } elseif ( strstr($type_of_file, "audio") ) { $icon = "audio.png"; } elseif ( strstr($type_of_file, "shellscript") ) { $icon = "shell.png"; } elseif ( strstr($type_of_file, "bzip2") || strstr($type_of_file, "gzip") || strstr($type_of_file, "zip") ) { $icon = "archive.png"; } elseif ( strstr($type_of_file, "octet-stream") ) { $icon = "file.png"; } return $icon; } /** Start */ $list_ignore = array ('.','index.php'); $handle = opendir("."); $h = 0; $i = 0; while ($file = readdir($handle)) { if (is_dir($file) && !in_array($file,$list_ignore)) { $dir[$h] = $file; $h++; } if (is_file($file) && !in_array($file,$list_ignore)) { $tab[$i] = $file; $i++; } } closedir($handle); /** Html header */ echo ('<html><head>'); echo ('<title>Section download</title>'); echo ('<link rel="stylesheet" type="text/css" href="'.$icondir.'/style.css">'); echo ('<link rel="icon" type="image/png" href="'.$icondir.'/site.png">'); echo ('</head>'); /** Body */ echo ('<body>'); if ($h) foreach ($dir as $rep) { $size = "-"; $mtime = date ("d/m/y H:i:s", filemtime($rep)); if ( $rep == '..') { echo ('<table border=0><tr><td width="32"><center><a href="'.$rep.'"><img src="'.$icondir.'/parent.png" border="0"></a></center></td><td width="450"><a href="'.$rep.'">Répertoire Parent</a></td></tr></table>'); echo ('<br>'); echo ('<table border=0><tr><td width="32"></td><td width="450"><font size="2">Nom de fichier</font></td><td width="150" align="right"><font size="2">Dernière modification</font></td></td><td width="100" align="right"><font size="2"><font size="2">Taille</font></font></td></tr></table>'); echo ('<br>'); } else { echo ('<table border=0><tr><td width="32"><center><a href="'.$rep.'"><img src="'.$icondir.'/dir.png" border="0"></a></center></td><td width="450"><a href="'.$rep.'">'.$rep.'</a><td width="150" align="right"><font size="2">'.$mtime.'</font></td></td><td width="100" align="right"><font size="2"><font size="2">'.$size.'</font></font></td></tr></table>'); } } if ($i) foreach ($tab as $rep) { $size = size_of_file($rep); $icon = type_of_file($rep); /** echo ('<font>'.$icon.'</font>'); */ $mtime = date ("d/m/y H:i:s", filemtime($rep)); echo ('<table border=0><tr><td width="32"><center><a href="'.$rep.'"><img src="'.$icondir.'/'.$icon.'" border="0"></a></center></td><td width="450"><a href="'.$rep.'">'.$rep.'</a></td><td width="150" align="right"><font size="2">'.$mtime.'</font></td><td width="100" align="right"><font size="2">'.$size.'</font></td></tr></table>'); } /** footer */ echo ('</body>'); echo ('</html>'); ?> Exemple ICI Toujours pret a recevoir des critiques quand à la qualité du code Lien vers le commentaire Partager sur d’autres sites More sharing options...
Quarky Posté(e) le 13 mars 2006 Partager Posté(e) le 13 mars 2006 Euh y aurait moyen que tu nous fasses une archive avec tous les png ? -edit- Par contre pour finaliser ton code, tu devrais le commenter histoire de t'y retrouver si tu dois y retroucher dans qques temps. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Captain Hadock Posté(e) le 13 mars 2006 Partager Posté(e) le 13 mars 2006 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Quarky Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Pour simplifier tous les echo du header html, tu peux faire ceci : $header = <<<EOT <html><head> <title>Titre</title> <link rel="stylesheet" type="text/css" href="'.$icondir.'/style.css"> <link rel="icon" type="image/png" href="'.$icondir.'/site.png"> </head> EOT; echo $header; -edit- Et puis si en plus des png, tu pouvais nous mettre le css, ce serait parfait. ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Quarky Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Sinon dans le premier foreach du body, j'ai changé quelques trucs pour n'avoir à faire qu'un seul echo : foreach ($dir as $rep) { $size = "-"; $mtime = date ("d/m/y H:i:s", filemtime($rep)); if ($rep == '..') { $struct = '<table border=0><tr><td width="32"><center><a href="'.$rep.'"><img src="'.$icondir.'/parent.png" border="0"></a></center></td><td width="450"><a href="'.$rep.'">Répertoire Parent</a></td></tr></table>'; $struct .= '<br />'; $struct .= '<table border=0><tr><td width="32"></td><td width="450"><font size="2">Nom de fichier</font></td><td width="150" align="right"><font size="2">Dernière modification</font></td></td><td width="100" align="right"><font size="2"><font size="2">Taille</font></font></td></tr></table>'; $struct .= '<br />'; echo $struct; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuxbubling Posté(e) le 14 mars 2006 Auteur Partager Posté(e) le 14 mars 2006 Alors voila bien modifié, merci quarky ca se trouve ICI Pour ce qui est du css, voila rien de bien sorcier le voila body{ background: #FFF; color: #000; font-size: 25%; line-height: 1.6em; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; border-top: 10px solid #FFF; } a{ color: #527abe; text-decoration: none; font-size: 80%; } a:visited{ color: #527abe; font-size: 80%; } a:hover{ color: #527abe; text-decoration: underline; font-size: 80%; } Pour ce qui est des icones, la majeure partie viens d'un pack dont je n'ai pas la license... Vous pouvez par contre récupérer celles de gnomes ICI Voili voilou :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
gvosnet Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Super, l'affichage fait très propre Par contre, il me balance un truc comme ça : Fatal error: Call to undefined function: finfo_open() in (blablabla)\index.php on line 27 Les dossiers s'affichent bien par contre... L'erreur se produit en local ainsi qu'en ligne (hébergement chez 1and1). Une idée ? Ok, ça doit être dû à la version de PHP utilisée. Pour parer à ça, j'utilise function_exists : if (function_exists("finfo_open")) { $res = finfo_open(FILEINFO_MIME); $files = glob("*"); $type_of_file = finfo_file($res, $file); finfo_close($res); /** Détermine l'icone selon le type */ if ( strstr($type_of_file, "text") ) { $icon1 = "text.png"; } /* blablabla */ elseif ( strstr($type_of_file, "octet-stream") ) { $icon1 = "file.png"; } if ( strstr($file, ".xcf") ) { $icon1 = "gimp.png"; } elseif ( strstr($file, ".mpg") || strstr($file, ".wmv")) { $icon1 = "video.png"; } } else { $icon1 = "file.png"; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuxbubling Posté(e) le 14 mars 2006 Auteur Partager Posté(e) le 14 mars 2006 Oui c'est du a l'extension 'PECL-fileinfo', que j'utilise pour retourner le type de fichier. Si tu ne veut/peut pas l'utiliser, tu peut mettre une icone par type de cette manière: if ( strstr($rep, ".jpg") || strstr($rep, ".gif") || strstr($rep, ".png") { $icon = "image.png"; } C'est moins propre et fera taper plus de code, mais effectivement l'extension ne doit pas etre présente chez tous les hébergeur. Lien vers le commentaire Partager sur d’autres sites More sharing options...
gvosnet Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Bah, c'est pas trop grave, si c'est pas géré, je mets une icône par défaut et puis voilà... Merci beaucoup pour ton travail Lien vers le commentaire Partager sur d’autres sites More sharing options...
.BöD. Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Là bravo ! Par contre j'ai du remettre la structure avec les if else au lieu de la fonction qui retourne le type de fichier... mais c'est pas bien grave... Merci encore a toi ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
.BöD. Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Idée d'amélioration : Classer les fichiers par ordre alphabétique, ce serait quand méme plus pratique quand on a beaucoup de fichiers... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Quarky Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Moi aussi j'avais pensé au tri alphabétique ... mais pas encore essayé ! Pour ce qui est de la fonction finfo vous pouvez trouvez de la doc par ici et sinon, le site officiel de PECL. Lien vers le commentaire Partager sur d’autres sites More sharing options...
.BöD. Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 J'ai trouvé moi aussi, mais c'est pas du tout ce que TFC69 a fait, et méme si c'est très bien ce qu'il a fait, j'ai trouvé beaucoup mieux... Avec un .htaccess bien fait, deux pages html, et ca marche sur tout le serveur, pas besoin de mettre un index dans chaque répertoire... Source : http://ldbglobe.fried-rice.net/blog/2004/1...che-et-htaccess Exemple : http://bod148.free.fr/ PS : Mattez la vidéo sur le 2éme lien, elle est excellente lol Lien vers le commentaire Partager sur d’autres sites More sharing options...
Quarky Posté(e) le 14 mars 2006 Partager Posté(e) le 14 mars 2006 Ce serait sympa d'avoir une ch'tite explication pour utiliser finfo ... Sinon pour j'ai testé vite fait la méthode que tu as trouvé .BöD. mais ca donne rien ... Par contre pour le répertoire "icons, il manque un "/" juste après ... $icondir = "CHEMIN/icons/"; Mais pour le chemin ce sera à l'appréciation de chacun selon l'endroit ou il veut mettre le répertoire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.