Afficher le nom du dossier ou des sous dossiers

Julien01
Invité n'ayant pas de compte PHPfrance

22 juin 2012, 14:17

Bonjour,
j'essaye de mettre en place un code PHP qui me sort tout les fichiers présent dans mon répertoire, et qui me le donne sous forme de liste.
J'ai commencé mes recherches et mon projet à l'aide de code trouver sur internet, et d'explications diverses que j'ai pu trouver.
Malheureusement un problème persiste: récupérer l'ensemble du nom du/des sous dossier ou est le script
(J'ai effectuer quelque recherche sur internet, et je n'ai sois pas compris, soit pas trouvé)

Voici le code:
<?php
$dir_nom = '.'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers
$monUrl = "http://".$_SERVER['HTTP_HOST'];

while($element = readdir($dir)) {
	if($element != '.' && $element != '..') {
		if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
		else {$dossier[] = $element;}
	}
}

closedir($dir);

if(!empty($fichier)){
	sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
	echo "\t\t\n";
		foreach($fichier as $lien) {
			echo "<br>[img]<a%20href=\"$monUrl/$dir_nom/$lien%20\">$monUrl/$lien</a>[/img]\n";
		}
	echo "\t\t";
	
 }

?>
Et si je n'ais pas été assez claire, voici en pratique: http://dikip.free.fr/test/test2.php
En fait il faudrait que /test/ apparaisse dans le lien
Et pour http://dikip.free.fr/test/test/test2.php
Que /test/test/ aparaisse.
En bref que je puisse lister le dossier, et le(s) sous dossier(s) ou est le script de manière "automatique"

Merci
Julien

ViPHP
ViPHP | 2577 Messages

22 juin 2012, 14:50

<?php

function lectdir($dir) {
   $rep = opendir($dir) or die('Erreur de listage : le répertoire n\'existe pas');
   while($element = readdir($rep)) {
           if($element != '.' && $element != '..') {
                   if (!is_dir($element)) {$fichier[] = $dir.'/'.$element;}
                   else {lecdir($dir.'/'.$element);}
           }
   }
closedir($rep);
}

$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$monUrl = "http://".$_SERVER['HTTP_HOST'];
lecdir('.');
if(!empty($fichier)){
        sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
        echo "\t\t\n";
                foreach($fichier as $lien) {
                        echo "<br>[img]<a%20href=\"$monUrl/$dir_nom/$lien%20\">$monUrl/$lien</a>[/img]\n";
                }
        echo "\t\t";
 }
?>

Julien01
Invité n'ayant pas de compte PHPfrance

22 juin 2012, 15:25

Merci,
je n'ai pas compris exactement ce qui a été fait.
tu as ajouté une fonction lectdir/lecdir, il y avait deux orthographe différents.
J'ai changé en voulant mettre partout la même orthographe et je me retrouve face à une page blanche.
Si tu pouvais m'expliquer tes modifications, ou me dire si j'ai fais une mauvaise manipulation

Encore merci
Julien

Julien01
Invité n'ayant pas de compte PHPfrance

22 juin 2012, 15:27

EDIT: si je ne mettait pas la même orthographe partout j'avais une erreur. Je la met si ca peux t'aider
Fatal error: Call to undefined function: lecdir() in /mnt/110/sdb/4/c/dikip/test/test3.php on line 17
(je met un second post, car en invité, on ne peut pas édité ses messages)

ViPHP
ViPHP | 2577 Messages

22 juin 2012, 15:46

Ajoute "global $fichier;" au début de la fonction. Désolé pour cet oubli (cf portée des variables)

Il faut bien utiliser le même nom de fonction. C'est un appel récursif.

Julien01
Invité n'ayant pas de compte PHPfrance

22 juin 2012, 16:05

Merci !
J'ai effectué l'ajout du "global $fichier;" au debut de la fonction et le script fonctionne.
Seul problème il ne me met pas le nom de mon mon dossier, il met un point suivit d'un espace:
http://dikip.free.fr/test/test3.php

EDIT: Le script marche si je le met à l'index du FTP
Y aurait t il une solution pour qu'il fonctionne "correctement" depuis un sous dossier ?
Si non, tant pis, le script tel qu'il est va déjà beaucoup m'aider :)

ViPHP
ViPHP | 2577 Messages

22 juin 2012, 17:23

<a href="$lien ">$lien</a> ?