Posté(e) le 10 mars 200619 a 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
Posté(e) le 10 mars 200619 a 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.
Posté(e) le 10 mars 200619 a Auteur 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...
Posté(e) le 10 mars 200619 a 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...
Posté(e) le 10 mars 200619 a Auteur 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
Posté(e) le 11 mars 200619 a Auteur 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
Posté(e) le 11 mars 200619 a 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 ?
Posté(e) le 12 mars 200619 a Auteur 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
Posté(e) le 12 mars 200619 a 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
Posté(e) le 12 mars 200619 a Auteur 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
Posté(e) le 13 mars 200619 a 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.
Posté(e) le 14 mars 200619 a 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. ...
Posté(e) le 14 mars 200619 a 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; }
Posté(e) le 14 mars 200619 a Auteur 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 :)
Posté(e) le 14 mars 200619 a 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"; } Modifié le 14 mars 200619 a par gvos_net
Posté(e) le 14 mars 200619 a Auteur 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.
Posté(e) le 14 mars 200619 a 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
Posté(e) le 14 mars 200619 a 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 !
Posté(e) le 14 mars 200619 a 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...
Posté(e) le 14 mars 200619 a 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.
Posté(e) le 14 mars 200619 a 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
Posté(e) le 14 mars 200619 a 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.
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.