Aller au contenu

liste répertoire serveur web


Messages recommandés

Posté(e)

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)

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)

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)

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 :p

Posté(e)

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/ :non:

Plutot fier du résultat, ca fonctionne très bien :byebye:

Toutefois je suis pas sur que le code soit très propre, donc toute les corrections sont les bienvenues :|

Posté(e)

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 :D:eeek2:

Posté(e)

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 :francais:

Posté(e)

Euh y aurait moyen que tu nous fasses une archive avec tous les png ? :transpi:

-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)

Pour simplifier tous les echo du header html, tu peux faire ceci :ouioui: :

$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)

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)

Alors voila bien modifié, merci quarky :mdr: 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)

Super, l'affichage fait très propre :chinois:

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";
	}

Posté(e)

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)

Là bravo ! :vomi2:

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 ! :yes:

Posté(e)

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... :yes:

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)

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.

×
×
  • Créer...