Aller au contenu

liste répertoire serveur web


Messages recommandés

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

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

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

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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:

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

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

Lien vers le commentaire
Partager sur d’autres sites

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...