<?php
/*------------------------------*/
/*
Titre : Liste des répertoires et sous-répertoires
Auteur : Mathieu
Date édition : 01 Sept 2004
Date mise a jour : 07 Aout 2019
Rapport de la maj:
- refactoring du code en PHP 7
- fonctionnement du code vérifié
- correction du code
- amélioration du code
- modification de la description
*/
/*------------------------------*/?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
* {font-size: 10pt;}
a:link, a:hover, a:active, a:visited {color: #0000FF;}
</style>
</head>
<body>
<?php
$order = isset($_GET['order']) ? $_GET['order'] : '';
$order0 = isset($_GET['order0']) ? $_GET['order0'] : '';
$dir = isset($_GET['dir']) ? $_GET['dir'] : '';
$asc = isset($_GET['asc']) ? $_GET['asc'] : '';
/* racine */
$BASE = '../';
/* infos à  extraire */
function addScheme($entry,$base,$type) {
$tab['name'] = $entry;
$tab['type'] = filetype($base.'/'.$entry);
$tab['size'] = filesize($base.'/'.$entry);
$tab['access'] = fileatime($base.'/'.$entry);
$tab['ext'] = $t[count($t)-1];
return $tab;
}
/* liste des dossiers */
function list_dir($base, $cur, $level=0) {
global $BASE, $order, $asc;
$tab = array();
if(
is_dir($base.'/'.$entry) && !in_array($entry, array('.','..'))) {
$tab[] = addScheme($entry, $base, 'dir');
}
}
/* tri */
foreach($tab as $elem) {
$entry = $elem['name'];
/* chemin relatif à  la racine */
$file = $base.'/'.$entry;
/* marge gauche */
for($i=1; $i<=(4*$level); $i++) {
echo ' ';
}
/* l'entrée est-elle le dossier courant */
if($file == $cur) {
echo "<img src=\"images/dir-open.gif\" /> $entry<br />\n";
} else {
echo
" <img src=\"images/dir-close.gif\" /> <a href=\"$_SERVER[PHP_SELF]?dir=".
rawurlencode($file)."&order=$order&asc=$asc\">$entry</a><br />\n";
}
/* l'entrée est-elle dans la branche dont le dossier courant est la feuille
*/
list_dir($file, $cur, $level+1);
}
}
}
}
/* liste des fichiers */
function list_file($cur) {
global $order, $asc, $order0;
/* tableaux */
$tab_dir = array();
$tab_file = array();
/* extraction */
if(!in_array($file, array('.','..'))) {
$tab_dir[] = addScheme($file, $cur, 'dir');
}
} else {
$tab_file[] = addScheme($file, $cur, 'file');
}
}
/* tri */
usort($tab_dir,'cmp_'.$order);
usort($tab_file,'cmp_'.$order);
/* affichage */
echo '<table cellspacing="0" cellpadding="0" border="0">';
echo '<tr style="font-size:8pt;font-family:arial;">
<th>'.(($order=='name')?(($asc=='a')?'/\\ ':'\\/ '):'').
"<a href=\"".$_SERVER['PHP_SELF']."?dir=".rawurlencode($cur).
"&order=name&asc=$asc&order0=$order\">Nom</a></th><td> </td>
<th>".(($order=='size')?(($asc=='a')?'/\\ ':'\\/ '):'').
"<a href=\"".$_SERVER['PHP_SELF']."?dir=".rawurlencode($cur).
"&order=size&asc=$asc&order0=$order\">Taille</a></th><td> </td>
<th>".(($order=='date')?(($asc=='a')?'/\\ ':'\\/ '):'').
"<a href=\"".$_SERVER['PHP_SELF']."?dir=".rawurlencode($cur).
"&order=date&asc=$asc&order0=$order\">Dernière modification</a></th><td>" .
" </td>
<th>".(($order=='type')?(($asc=='a')?'/\\ ':'\\/ '):'').
"<a href=\"".$_SERVER['PHP_SELF']."?dir=".rawurlencode($cur).
"&order=type&asc=$asc&order0=$order\">Type</a></th><td> </td>
<th>".(($order=='ext')?(($asc=='a')?'/\\ ':'\\/ '):'').
"<a href=\"".$_SERVER['PHP_SELF']."?dir=".rawurlencode($cur).
"&order=ext&asc=$asc&order0=$order\">Extention</a></th><td> </td>
<th>".(($order=='perms')?(($asc=='a')?'/\\ ':'\\/ '):'').
"<a href=\"".$_SERVER['PHP_SELF']."?dir=".rawurlencode($cur).
"&order=perms&asc=$asc&order0=$order\">Permissions</a></th><td> </td>
<th>".(($order=='access')?(($asc=='a')?'/\\ ':'\\/ '):'').
"<a href=\"".$_SERVER['PHP_SELF']."?dir=".rawurlencode($cur).
"&order=access&asc=$asc&order0=$order\">Dernier accès</a></th></tr>";
foreach($tab_dir as $elem) {
echo '<tr><td><img src="images/dir-close.gif" /> '.$elem['name'].
'</td><td> </td>
<td> </td><td> </td>
<td>'
.date("d/m/Y H:i:s", $elem['date']).'</td><td> </td>
<td>'.assocType($elem['type']).'</td><td> </td>
<td> </td><td> </td>
<td>'.$elem['perms'].'</td><td> </td>
<td>'
.date("d/m/Y", $elem['access'])."</td></tr>\n";
}
foreach($tab_file as $elem) {
echo '<tr><td><img src="images/file-none.gif" /> '.$elem['name'].
'</td><td> </td>
<td align="right">'.formatSize($elem['size']).'</td><td> </td>
<td>'
.date("d/m/Y H:i:s", $elem['date']).'</td><td> </td>
<td>'.assocType($elem['type']).'</td><td> </td>
<td>'.assocExt($elem['ext']).'</td><td> </td>
<td>'.$elem['perms'].'</td><td> </td>
<td>'
.date("d/m/Y", $elem['access'])."</td></tr>\n";
}
echo "</table>";
}
}
/* formatage de la taille */
function formatSize($s) {
/* unités */
$u = array('octets','Ko','Mo','Go','To');
/* compteur de passages dans la boucle */
$i = 0;
/* nombre à  afficher */
$m = 0;
/* division par 1024 */
while($s >= 1) {
$m = $s;
$s /= 1024;
$i++;
}
if(!$i) $i=1;
/* s'il y a des décimales */
if($d[0] != $m) {
}
return $m.' '.$u[$i-1];
}
/* formatage du type */
function assocType($type) {
/* tableau de conversion */
$t = array(
'fifo' => 'file',
'char' => 'fichier spécial en mode caractère',
'dir' => 'dossier',
'block' => 'fichier spécial en mode bloc',
'link' => 'lien symbolique',
'file' => 'fichier',
'unknown' => 'inconnu'
);
return $t[$type];
}
/* description de l'extention */
function assocExt($ext) {
$e = array(
'' => "inconnu",
'doc' => "Microsoft Word",
'xls' => "Microsoft Excel",
'ppt' => "Microsoft Power Point",
'pdf' => "Adobe Acrobat",
'zip' => "Archive WinZip",
'txt' => "Document texte",
'gif' => "Image GIF",
'jpg' => "Image JPEG",
'png' => "Image PNG",
'php' => "Script PHP",
'php3' => "Script PHP",
'htm' => "Page web",
'html' => "Page web",
'css' => "Feuille de style",
'js' => "JavaScript"
);
return $e[$ext];
} else {
return $e[''];
}
}
function cmp_name($a,$b) {
global $asc;
if ($a['name'] == $b['name']) return 0;
if($asc == 'a') {
return ($a['name'] < $b['name']) ? -1 : 1;
} else {
return ($a['name'] > $b['name']) ? -1 : 1;
}
}
function cmp_size($a,$b) {
global $asc;
if ($a['size'] == $b['size']) return cmp_name($a,$b);
if($asc == 'a') {
return ($a['size'] < $b['size']) ? -1 : 1;
} else {
return ($a['size'] > $b['size']) ? -1 : 1;
}
}
function cmp_date($a,$b) {
global $asc;
if ($a['date'] == $b['date']) return cmp_name($a,$b);
if($asc == 'a') {
return ($a['date'] < $b['date']) ? -1 : 1;
} else {
return ($a['date'] > $b['date']) ? -1 : 1;
}
}
function cmp_access($a,$b) {
global $asc;
if ($a['access'] == $b['access']) return cmp_name($a,$b);
if($asc == 'a') {
return ($a['access'] < $b['access']) ? -1 : 1;
} else {
return ($a['access'] > $b['access']) ? -1 : 1;
}
}
function cmp_perms($a,$b) {
global $asc;
if ($a['perms'] == $b['perms']) return cmp_name($a,$b);
if($asc == 'a') {
return ($a['perms'] < $b['perms']) ? -1 : 1;
} else {
return ($a['perms'] > $b['perms']) ? -1 : 1;
}
}
function cmp_type($a,$b) {
global $asc;
if ($a['type'] == $b['type']) return cmp_name($a,$b);
if($asc == 'a') {
return ($a['type'] < $b['type']) ? -1 : 1;
} else {
return ($a['type'] > $b['type']) ? -1 : 1;
}
}
function cmp_ext($a,$b) {
global $asc;
if ($a['ext'] == $b['ext']) return cmp_name($a,$b);
if($asc == 'a') {
return ($a['ext'] < $b['ext']) ? -1 : 1;
} else {
return ($a['ext'] > $b['ext']) ? -1 : 1;
}
}
?>
<table border="1" cellspacing="0" cellpadding="10" bordercolor="gray">
<tr valign="top"><td>
<!-- liste des répertoires
et des sous-répertoires -->
<?php
if(!in_array($order, array('name','date','size','perms','ext','access','type')))
{
$order = 'name';
}
if(($order == $order0) && ($asc != 'b')) {
$asc = 'b';
} else {
$asc = 'a';
}
/* lien sur la racine */
if(!$dir) {
echo "<img src=\"images/dir-open.gif\" /> /<br />\n";
} else {
echo
"<img src=\"images/dir-close.gif\" /> <a href=\"".$_SERVER['PHP_SELF'].
"\">/</a><br" .
" />\n";
}
?>
</td><td>
<!-- liste des fichiers -->
<?php
/* répertoire initial à  lister */
if(!$dir) {
$dir = $BASE;
}
?>
</td></tr>
</table>
Administrateur
03 Sept 2019 à 20:20images/dir-open.gif ET images/dir-close.gif ET images/file-none.gif ..... Ne sont pas dispo sur le site, a vous de les ajouter.
Invité
03 Sept 2019 à 18:30Bonjour, "Utilise images, voir les liens en bas du code."
Je ne trouve pas les liens pour les images. Peut-etre une incompréhension de ma part, peut-etre un lien qui a sauté lors d'une mise a jour. En tout cas trés utile quand je fais une démo et que j'oublie ou se trouve tel fichier ou image ; je lance "discretement" dans un autre onglet le prog. Néanmoins, je vais ajouter une clé d'accés pour ne pas faciliter le travail d'un éventuel curieux !! Merci
KOogar
04 Jan 2011 à 03:09essaye :
if(preg_match("/$file.'\/'/", $cur.'/', $matches))
Invité
03 Jan 2011 à 18:34Voila j'ai un problème avec le script !! Car la fonction EREG() n'est plus supporter !! Je l'ai remplacer pas PREG-MATCH() mais ça beug!!
Invité
14 Mai 2009 à 16:57Salut,
le script est nickel, sauf que j'ai des messages d"erreur aussi !
Je me penche la dessus !
Est-il possible de rendre les noms de fichiers qui apparaissent à droites interactif via des liens hypertextes ?
D'avance merci.
Scoubidou
21 Août 2005 à 14:28Depuis hier je me casse la tete a faire un lien pour les fichier, mais je n'arrive pas a mettre le /, a tu une solution a me proposer ?
Scoubidou
20 Août 2005 à 13:49dsl pour le double post sa a bugger :(
sinon j'ai trouver l'erreur pour $BASE = '../'; , j'ai mis :
$BASE = 'g:\neeweb\sites\scoubidou\';
Laurent
20 Août 2005 à 04:46Ce script est nickel !! Voir ++
regarde la base, j'ai modifier en :
$BASE = '../';
+ clair pour les débutants ^^
..ce qui est plus juste si tu met le script à la racine, mais bon c'est la BASE du webmastering que de connaitre les chemins : ../../../
Merci pour l'info des icones, ^^
++
Scoubidou
20 Août 2005 à 00:20Le lien de dl ne marche pas ;)
sinon sa m'affiche qu'un "/" dans un tableau oO