Dir et php

Salut la zone,

Je vous explique mon probleme:
je souhaite simplement afficher dans une page web les folders presents dans un folder.
J’ai un repertoire “pics” et un repertoire “vids” ainsi que le script situés dans le root;
voici le bout de code php

<?php $d = dir('pics'); while(is_dir($entry = $d->read())) { echo "$entry
"; } $d->close(); ?>

Le problème étant que l output pour le repertoire “pics” donne . et … et rien d’autre (il y a pourtant bien d’autres dossiers dans “pics”, et meme que des dossiers et aucun fichier)

Quand je teste le meme bout de code mais avec $d = dir(’./’); ca marche correctement et donne comme output . … pics vids
Donc en gros ca veut bien lister les folders dans le root mais ca ne veut pas lister les folders dans “pics”

Serait-ce un probleme de droit de lecture? les droits du root et de “pics” sont identiques (drxw------)
Je suis un peu perdu là, donc votre aide est la bienvenue!

D.

PS: site hebergé chez free (donc pas access a la conf php etc… ni a la fonction scandir() qui est sous php5)
edit: sorry sorry, j’ai vu webdev trop tard et posté au mauvais endroit… je sais je sais… lapidez moi

hum “./pics” ?

au pif

LoneWolf
qui a peut etre du nez

nope, “pics” , “pics/”, “./pics” et “./pics/” donnent tous le meme resultat, seulement “.” et “…” comme folders
avec “/pics” et “/pics/” , le folder n’est pas trouvé.

donc tjrs au meme point, merci quand meme

[quote=“Darakiss, post:1, topic: 30149”]while(is_dir($entry = $d->read())) {
echo "$entry
";
}[/quote]
bon des fois je vois pas les conneries alors qu’elle sont RIGHT devant les yeux.

Essaye ca:

while (false !== ($entry = $d->read())) { echo $entry."\n"; }
eh oui, lire le resultat de dir() jusqu’a ce qu’on trouve un fichier, c’est une mauvaise idee, et c’est une erreur algorithmique, et pas de php.

LoneWolf
Long a la detente - on dira que c’est la fatigue.

yes c cool merci, donc mon code ressemble maintenant a ca

<?php $d = dir('pics'); while (false !== ($entry = $d->read())) { if (is_dir($entry)) { echo "$entry
"; } } $d->close(); ?>

je remarque cependant qu il y a un probleme avec is_dir($entry) car avec le code tel quel, ca me sort toujours “.” et “…” comme folders…

avec ce code si (sans le if)

<?php $d = dir('pics'); while (false !== ($entry = $d->read())) { echo "$entry
"; } $d->close(); ?>

ca me sort tout les folders presents, donc je ne comprends plus rien là…

LoneWolf, merci de ton aide! mais t’as encore du boulot B)

[quote=“Darakiss, post:5, topic: 30149”]yes c cool merci, donc mon code ressemble maintenant a ca

<?php $d = dir('pics'); while (false !== ($entry = $d->read())) { if (is_dir($entry)) { echo "$entry
"; } } $d->close(); ?>

je remarque cependant qu il y a un probleme avec is_dir($entry) car avec le code tel quel, ca me sort toujours “.” et “…” comme folders…[/quote]
euh oui c’est normal…
Et comme j’aime pas le “t’as encore du boulot”, je vais repondre avec une enigme:
Dans quel repertoire execute tu le script PHP?

[quote=“Darakiss, post:5, topic: 30149”]avec ce code si (sans le if)

<?php $d = dir('pics'); while (false !== ($entry = $d->read())) { echo "$entry
"; } $d->close(); ?>

ca me sort tout les folders presents, donc je ne comprends plus rien là…[/quote]
moi je comprends parce que c’est basique, mais bon, il est minuit quand meme…

hum… t’es en train de me dire que je suis en train de faire ton taf la?
ca devrait etre TON boulot.

LoneWolf
Mode pere fouras active

oulaaa tout doux… tu vois que les trucs négatifs? genre les merci, c cool, tout ca finalement ca compte pour rien… le “t’as du boulot” c’etait vraiment pas méchant, c’etait plus genre “je suis une burne donc ton aide est fortement appréciée/solicitée”

et quand je dis que je ne comprends pas, c pas le 2e bout de code que je ne comprends pas (il fait ce que je lui demande) mais pourquoi is_dir() ne fonctionne pas lorsque le script se situe 1 level en dessous du folder

MERCI quand meme.

Tenter de faire de l’humour, c’est bien mais ca marche pas toujours, la preuve.

Ceci dit, comme je suis all heart, je vais t’expliquer.

Lors de mes cours PHP, j’explique a mes stagiaires que, quand ca fonctionne pas comme
prevu, il faut decomposer le logiciel en faisant un tableau:

Ligne de code : affichage : variables : repertoire de travail.

Notre site est dans home_site/ et dans le repertoire, on a pics duquel on va
extraire son contenu. Dans home_site, il n’a que pics et dans pics, il y a
image1 et image2

Je suis desole pour l’aspect rudimentaire du tableau

Ligne de code | affichage | variables | repertoire de travail. $d = dir('pics'); | rien | d <- contenu de pics | home_site/ $entry = $d->read() | rien | entry<-"." | home_site is_dir($entry) | rien | Est ce qu'il y a . dans home_site echo "$entry <br>"; | . | oui, affichage | home_site $entry = $d->read() | rien | entry<-".." | home_site is_dir($entry) | rien | Est ce qu'il y a .. dans home_site echo "$entry <br>"; | .. | oui, affichage | home_site $entry = $d->read() | rien | entry<-"image1" | home_site is_dir($entry) | rien | Est ce qu'il y a image2 dans home_site (non) $entry = $d->read() | rien | entry<-"image2" | home_site is_dir($entry) | rien | Est ce qu'il y a image2 dans home_site (non)

Is it perfectly clear to you?

LoneWolf
Cours d’algorithmique

humpf…