March 10, 200619 yr 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
March 10, 200619 yr 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.
March 10, 200619 yr Author 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...
March 10, 200619 yr 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...
March 10, 200619 yr Author 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
March 11, 200619 yr Author 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
March 11, 200619 yr 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 ?
March 12, 200619 yr Author 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
March 12, 200619 yr 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
March 12, 200619 yr Author 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
March 13, 200619 yr 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.
March 14, 200619 yr 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. ...
March 14, 200619 yr 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; }
March 14, 200619 yr Author 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 :)
March 14, 200619 yr 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"; } Edited March 14, 200619 yr by gvos_net
March 14, 200619 yr Author 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.
March 14, 200619 yr 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
March 14, 200619 yr 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 !
March 14, 200619 yr 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...
March 14, 200619 yr 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.
March 14, 200619 yr 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
March 14, 200619 yr 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.
Archived
This topic is now archived and is closed to further replies.