lister un dossier avec liens uniquement sur fichier

manegedaix

Membre confirmé
10 Avril 2007
71
1
Bonjour grace a ce code, j'arrive a lister un dossier (marc) contenant des videos flash et a en faire des liens automatiquement:

<?php
header('Content-type: text/html; charset=utf-8');
$vids = opendir('marc');
?>
<ul>
<?php
while (($vid = readdir($vids)) !== false)
{
if (is_file('marc/'.$vid))
{
?>
<li><a href="http://monsite.fr/?q=node/5&video=<?php echo $vid; ?>"><?php echo $vid; ?></a></li>
<?php
}
}
?>
</ul>

tout marche impecablement mais je souhaite ameliorer la chose. Je possede plusieurs dossiers contenants des videos (dossiers marc et seb). Voici leur chemin respectif http://monsite.fr/videos/marc et http://monsite.fr/videos/seb.

Chaque dossier, possede des videos flash. Je souhaite faire la meme chose qu'avec le code ci dessus mais en faisant en sorte d'avoir une arborescence "propre". C'est a dire d'avoir un truc comme ça:

Videos - Marc - truc.flv ou Videos - Seb - Machin.flv où Chaque terme (videos, marc, seb seraient un lien qui renverrait vers le dossier).

Comment proceder? Merci de vos precieux conseils.
 
La question a d&#233;j&#224; &#233;t&#233; trait&#233;e, mais un petit rappel ne fait pas de mal.

Ta fonction contient une condition IF. Le code est ex&#233;cut&#233; si la condition est remplie, c'est-&#224;-dire si l'&#233;l&#233;ment est un fichier, mais en l'absence de clause ELSE rien ne se passe si l'&#233;l&#233;ment n'est pas un fichier (donc, si c'est un dossier). La premi&#232;re chose &#224; faire est de d&#233;finir une action &#224; ex&#233;cuter lorsque l'&#233;l&#233;ment est un dossier.

if (is_file('marc/'.$vid))
{ // fichier }
else
{ //dossier }

Le probl&#232;me, c'est qu'avec ce code, tu vas aussi r&#233;cup&#233;rer "." et ".." (consid&#233;r&#233;s comme des dossiers) qui repr&#233;sentent sous Unix le niveau sup&#233;rieur dans l'arborescence et le dossier racine. Vu ce que l'on va faire ensuite, traiter ces deux &#233;l&#233;ments pourrait conduire &#224; une boucle infinie et mettre &#224; genoux le serveur. D'o&#249; la n&#233;cessit&#233; de changer ELSE en ELSEIF :

elseif(is_dir('marc/'.$vid) and $vid != "." and $vid != "..")
{ // dossier }

Ensuite, tu as deux options. Soit tu te contentes d'afficher le nom du dossier (p. ex. dans une couleur diff&#233;rente de ceux des fichiers, pour les distinguer), soit tu continues le traitement pour afficher le contenu de ce dossier. Pour ce faire, il faut introduire une dose de r&#233;cursivit&#233; dans ta fonction :

function ParcourirDossiers($root)
{
$vids = opendir($root);

while (($vid = readdir($vids)) !== false)
{
if (is_file($root.'/'.$vid))
{ // fichier }
elseif(is_dir($root.'/'.$vid) and $vid != "." and $vid != "..")
{ ParcourirDossier($root.'/'.$vid); }
}
}