LECTURE DE TOUS LES SOUS DOSSIERS ET FICHIERS D'UN RÉPERTOIRE

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 4 sept. 2006 à 16:20
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 14 sept. 2007 à 15:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39422-lecture-de-tous-les-sous-dossiers-et-fichiers-d-un-repertoire

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
14 sept. 2007 à 15:43
Hello,

@Jimi154 => Tu devrais relire tes classiques ;-)
http://www.php.net/manual/fr/language.operators.comparison.php

la double égalité ou inégalité : == ou != ne compare pas sur les types :
<?php
$a = 0;
$b = false;
if ($a == $b) {
echo 'égaux';
} else {
echo 'inégaux;
}
if ($a === $b) {
echo 'égaux';
} else {
echo 'inégaux';
}
?>
Comme tu peux le voir, avec == , $a et $b sont égaux. Or, l'un est un entier dont la valeur est 0, l'autre un bouléen dont la valeur est false.
Avec ===, ils deviennent inégaux, ce qui est bien plus juste.
L'égalité avec === et l'inégalité avec !==, donc.
C'est bien moins dangereux...un exemple ?
<?php
$sChaine = 'ma chaîne';
if (false == strpos($sChaine, 'm')) {
echo 'm ne se trouve pas dans la chaîne : ma chaîne avec ==';
} else {
echo 'm se trouve dans la chaîne : ma chaîne avec ==';
}
if (false === strpos($sChaine, 'm')) {
echo 'm ne se trouve pas dans la chaîne : ma chaîne avec ===';
} else {
echo 'm se trouve dans la chaîne : ma chaîne avec ===';
}
?>
cs_jimi154 Messages postés 1 Date d'inscription jeudi 27 février 2003 Statut Membre Dernière intervention 14 septembre 2007
14 sept. 2007 à 12:39
salut, On ecrit pas !== mais plutot != pour signifier l'inégalité.
cs_hrz Messages postés 43 Date d'inscription samedi 12 juillet 2003 Statut Membre Dernière intervention 4 avril 2010
19 mars 2007 à 19:17
salut
je passerai sur les remarque ci dessus pour en faire une tout autre:
pour avoir code une fonction similaire je suis tomber sur un des gros problemes des fonctions recursives a savoir les boucles sans fin.....
En travaillant sous linux avec des liens symboliques ( A=>B,B=>C,C=>A ) ,le script s'est mis en boucle et sous linux en 30s (timeout du script) la page generee etait tres genereuse ;)
attention donc de ne pas suivre ce type de liens symboliques
et dans ce cas la fonction is_link() arrange bien les chose .
ce jour la , is_link() a fait beaucoup plus que les ' les " ou quoi que ce soit
CString Messages postés 20 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 19 avril 2007
9 nov. 2006 à 09:14
Voila mon petit script complet : http://www.phpcs.com/codes/SCANNER-FICHIER_40250.aspx
++
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 sept. 2006 à 19:05
Oui tout à fait... .. .

@ tchaOo°
oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007
21 sept. 2006 à 18:41
oups, dsl du double post, mais une question me trotte :
if ( $dir !== FALSE )
et si on fait if ( $dir === TRUE ), ça marche pareil, non ?
oXid_FoX Messages postés 27 Date d'inscription mercredi 4 février 2004 Statut Membre Dernière intervention 13 mars 2007
21 sept. 2006 à 18:39
pour les guillemets simples au lieu des doubles (et d'autres petites optimisations) :
http://www.vulgarisation-informatique.com/optimiser-php.php
http://www.estvideo.com/dew/index/page/phpbench
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
10 sept. 2006 à 18:56
Je veux pas que tu fasses " if ( $dir ) "
Mais plutot :

if ( $dir !== FALSE )

M'enfin après tu fais comme tu veux, soit tu suis la doc, soit tu fais comme tu le sens :p
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
9 sept. 2006 à 15:49
FhX: "if ($dir == TRUE) revient à écrire => if ($dir"
Vi, mais il y a un abus de langage ici.

Tu as tout à fait raison.
Merci de m'avoir reprit
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
7 sept. 2006 à 18:55
kankrelune > mouais... c'est une facon de voire les choses. die() peut avoir comme parametre un texte donc si tu le prepare avant, y a pas de raisons. J'utilise beaucoup l'inclusion de pages et je veille a ce que toutes les balises soient bien fermees. Donc avec un minimum de rigueur, je pense que c'est jouable. Reste apres le type de presentation mais bon, c'est a chacun de voir selon ses propres gouts ^^
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
7 sept. 2006 à 17:04
Le die() (ou le exit()) termine purement et simplement l'execution du script tu aura donc soit une une page blanche si aucun code html n'a encore été généré soit une page incomplete au niveau du html (pas de fermeture des balises <html> et notament)... donc c'est pas top comme gestionaire d'erreurs... prenons l'exemple de ce script... tu clique sur un lien et une nouvelle fenetre s'ouvre affichant l'arborescence du répertoire cible... si le fichier cible n'existe pas (ou plus) tu n'aura rien d'autre dans ta page que les définitions de style donc page blanche... autre exemple... si pour une raison x ou y un des sous répertoires n'est pas accessible en lecture le script s'arretera au milieu du listage sans finnir de construire la page... donc on ne peut pas dire que l'utilisation de die() dans ce contexte soit une bonne chose... c'est plus une solution de facilité... par contre après un header('location le die (ou exit()) est conseillé... ou pour empecher l'accès direct à une page... mais pas pour la gestion des erreurs de script... .. .

@ tchaOo°
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
7 sept. 2006 à 16:08
FhX > bah si mais comme je te l'ai dit c'est en C... tu as donne un exemple j'ai repondu comment je comprenais l'exemple. Je n'ai pas dit que c'etait valable ^^
"M'enfin bon, après faites comme vous voulez :p Ca devient une habitude d'écrire proprement :^p"
Pas sympa sa... j'essaye de faire du mieux que je peux en prenant en consideration mes erreurs ce qui sans me vanter, devient de plus en plus rare par les temps qui court :p

kankrelune > En quoi faire un die() renvois une page blanche ?? A mon sens, c'est un gestionnaire d'erreur. Sur mon album photo par exemple, echoue a l'ouverture d'un handle sur un repertoire est grave d'ou l'interet de stopper l'execution en informant l'utilisateur du pourquoi du comment. Jusqu'a present j'ai toujours considere que cette erreur etait grave dans tous mes scripts qui utilise cette fonction parce qu'il se basaient la dessus. C'est sur que si c'est pas super important, un petit echo fera l'affaire avant de poursuivre l'execution du script.

@++
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
7 sept. 2006 à 13:07
"En fait moi en general je suis opendir() avec un die."

Oui c'est biensur une option mais c'est le risque de se retrouver avec une page blanche... c'est pas très propre... mieux vaux mettre une condition pour gérer l'erreur en fonction du contexte dans lequel l'erreur survient... renvoi de false, d'une chaine ou d'un tableau vide dans le cas d'une fonction... ne rien afficher ou afficher un messae d'erreur maison sur l'ouverture du fichier dans le cas de cette source... .. .

@ tchaOo°
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
7 sept. 2006 à 10:41
"Pour moi sa veut dire que $str est bien initialise."
Faux, un test d'initialisation ne se fait pas par un simple ( if ( $var === TRUE ).

Il existe une fonction pour tester l'existance d'une variable ==> isset().

"Encore une habitude du C, chaque variable doit etre defini sur 0 si il n'y a pas de valeur immediate ainsi"
Chez moi, j'utilise NULL. Ca me permet de pouvoir utiliser isset() tranquillement :)

M'enfin bon, après faites comme vous voulez :p Ca devient une habitude d'écrire proprement :^p
CString Messages postés 20 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 19 avril 2007
6 sept. 2006 à 20:02
Oula tous ces commentaires , je ne m'attendais à tant pour ce petit bout de code , en tout cas merci à tous , je vais prendre en compte vos remarques pour améliorer tout ca .
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
6 sept. 2006 à 19:09
Malalam > C'est vrai que je n'avais pas penser au fichier '0'. Je vais donc suivre ton conseil et tester avec le === a present. Merci !

kankrelune > j'avais confondu avec une autre fonction. C'est vrai que c'est bel et bien un warning et je suis d'accord que ce n'est pas tres propre. En fait moi en general je suis opendir() avec un die. Chacun ses gouts, certains me diront que c'est inutile mais moi je prefere...


FhX > Par contre, si tu fais :
$str = 'lol';
if ( $str ).

Ca veut dire quoi ? En francais :
si ( lol ) = Vrai ?
Pardon ???
On parle pas le même langage la.

^^ Moi je viens du monde C/C++ et franchement sa ne me derange pas, au risque de faire hurler les puristes... lol. Pour moi sa veut dire que $str est bien initialise. Encore une habitude du C, chaque variable doit etre defini sur 0 si il n'y a pas de valeur immediate ainsi, si $str est vrai, c'est qu'il contient du texte (ou plus exactement en C, il contient l'adresse de la premiere case du tableau soit la premiere lettre). Bon c'est vrai que c'est peut etre pas super propre et qu'en php c'est inutile mais il m'arrive encore de declarer mes variables avant de les utiliser....
Et pour $_POST et $_GET par contre, php a beau etre permissif, c'est une question de securite apres. En tout cas moi je les utilise.

En tout cas, je vais suivre vos conseils et faire bien attention a ce genre de fautes afin d'etre sur que tout continue de fonctionner comme voulue ^^

Salut @ tous !
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
6 sept. 2006 à 17:57
"et je n'ai jamais lu qu'il fallait utiliser les ' plutot que les "."

Moi non plus :S

"et dans le cas present, la force de php vient justement dans la possibilite de faire tout ou presque de facon differente en utilisant parfois ce qu'on appelle afectueusement les "abus de langages" ;-) Donc autant en profiter !!!!"
Je prend l'exemple de register_global() par ex.
Bon nombre de personne utilise se genre "d'abus" parce que $_POST[] ou $_GET... c'est trop long à écrire :/

Comme je l'ai dit, je sais bien que PHP est permissif. Mais il l'a été pour des exemples bien précis et les gens se sont mis à écrire n'importe quoi avec.

Quand tu fais par ex :
if ( $var ).
Pour moi, j'insinue que $var est un boolean et que tu testes si $var === TRUE.
L'inverse est aussi vrai pour if ( !$var ). Pour moi, $var est soit FALSE, soit un mixed.

Par contre, si tu fais :
$str = 'lol';
if ( $str ).

Ca veut dire quoi ? En francais :
si ( lol ) = Vrai ?
Pardon ???
On parle pas le même langage la.

Voila pourquoi il faut bien utiliser le type de retour et pas seulement la facon "dont ca marche le mieux".
Il se pourrait qu'un jour plus rien en marche...


... en tout cas chez vous :) Voila pourquoi je vous préviens d'avance ^^
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
6 sept. 2006 à 15:57
"il n'est absolument pas necessaire de comparer $dir pour savoir si l'ouverture s'est bien deroule car dans tous les cas, si c'est pas le cas opendir() renvoi une erreur d'execution et le script s'arrete donc c'est parfaitement inutile"

Non php génère un warning et n'arrete donc pas l'éxécution du script... qui plus est pour une appli digne de ce nom c'est crade d'avoir un Warning : bla bla en début de page... ou en fin ou au milieu enfin bref c'est crade... conclusion toujours tester la réussite (ou non) de l'open dir... .. .

Je n'ais rien à ajouter à ce qu'on dit les autres hormis une remarque sur la mise en forme... pourquoi utiliser des alors que tu utilise les css => font-weight:bold;

@ tchaOo°
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 sept. 2006 à 13:38
Ouais, mais...
while ($f = readdir($dir))
ici, si on tombe sur unf fichier qui s'appelle '0', on s'arrête. Boum.

while (false !($file readdir($handle))) {
echo "$file\n";
Pas ici...

Donc, oui PHP est un langage permissif...trop...mais il vaut mieux, bien souvent, NE PAS coder en utilisant ce laxisme. Parce qu'on risque fort de se retrouver avec des bugs qu'on ne comprendra pas.

Exemple à exécuter...et à méditer :
<?php
$sChaine = 'boum';
if (!strpos ($sChaine, 'b')) {
echo 'via ! : la lettre b n\'est pas présente dans le mot boum
';
} else {
echo 'via ! :la lettre b est présente dans le mot boum
';
}
if (false == strpos ($sChaine, 'b')) {
echo 'via false == : la lettre b n\'est pas présente dans le mot boum
';
} else {
echo 'via false == :la lettre b est présente dans le mot boum
';
}
if (false === strpos ($sChaine, 'b')) {
echo 'via false === : la lettre b n\'est pas présente dans le mot boum
';
} else {
echo 'via false === :la lettre b est présente dans le mot boum
';
}
?>
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
6 sept. 2006 à 11:46
Salut !

Perso, pour avoir longtemps utilise ces fonctions, il n'est absolument pas necessaire de comparer $dir pour savoir si l'ouverture s'est bien deroule car dans tous les cas, si c'est pas le cas opendir() renvoi une erreur d'execution et le script s'arrete donc c'est parfaitement inutile ...
Ensuite, utilise de preference les echo 'text', $Var, 'text' plutot que 'text' . $Var . 'text'. Tu gagnes a en rapidite. Il reste encore des " a la place des ' donc faut corriger sa !!
Derniere chose : "Je posterai l'intégralité de mon script d'audit de répertoire très bientot... ". Pourquoi l'avoir poste maintenant alors ?? Qu'il sagisse d'une doc ou une annexe OK mais la tu presentes un code qui n'est pas complet !!

FhX > J'ai lu la doc aussi et j'ai meme acheter le bouquin de Rasmus Lerdorf (edition preics & concis) et je n'ai jamais lu qu'il fallait utiliser les ' plutot que les ". Il y a encore un paquet d'exemples comme cela qu'un bon developpeur PHP doit connaitre et pourtant sa n'y est pas dans les references du langages. Je me pose la question alors : faut il vraiment se fier a la doc officielle ?? J'imagine que oui (sinon sa ne serait pas officielle ^^) mais je pense qu'on doit pouvoir trier... et dans le cas present, la force de php vient justement dans la possibilite de faire tout ou presque de facon differente en utilisant parfois ce qu'on appelle afectueusement les "abus de langages" ;-) Donc autant en profiter !!!!

@++ tout le monde !
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
6 sept. 2006 à 00:08
"if ($dir == TRUE) revient à écrire => if ($dir)"
Vi, mais il y a un abus de langage ici.

Je cite la doc officiel (même si je la connais ^^) :
"Retourne la ressource de dossier en cas de succès ou FALSE en cas d'échec."

Ici, il y a une grosse erreur. Je sais que PHP est permissible, mais le jour où il ne le deviendra plus, vous seriez bien embété !
Voici ce qu'il faut mettre à la place :
if ( $dir !== FALSE ) {

Une autre erreur de langage également ici :
while ($f = readdir($dir))

D'après la doc :
"/* Ceci est la façon correcte de traverser un dossier. */
while (false !($file readdir($handle))) {
echo "$file\n";
}

/* Ceci est la MAUVAISE façon de traverser un dossier. */
while ($file = readdir($handle)) {
echo "$file\n";
}
"

Voila voila :)
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
5 sept. 2006 à 17:54
Salut,

l'idée est bonne et le code est bien mené(récursivité).
Cependant quelques petites suggestions:
$curDir = $rep.$f et utiliser $curDir dans la boucle au lieu de devoir concaténer à chaque fois.
if ($dir TRUE) revient à écrire> if ($dir)

une bonne source tout de meme,

bonne chance pour la suite !
Sannazzarotiti Messages postés 228 Date d'inscription jeudi 1 septembre 2005 Statut Membre Dernière intervention 12 avril 2009
5 sept. 2006 à 14:09
Oui oui, mais tout le monde n'est pas comme toi. En tout cas merci pour la source ^^
CString Messages postés 20 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 19 avril 2007
5 sept. 2006 à 13:18
Puis si je la poste c'est que je l'ai pas trouvé , c'est juste pour aider je ne fais pas de compete ...
CString Messages postés 20 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 19 avril 2007
5 sept. 2006 à 13:17
Pour info la source est vraiment de moi, je n'ai pas l'exclusivité des mes idées puis par ailleurs je ne vois l'intérêt de poster une source pomper ailleurs , a bonne entendeur cher monsieur .
Sannazzarotiti Messages postés 228 Date d'inscription jeudi 1 septembre 2005 Statut Membre Dernière intervention 12 avril 2009
5 sept. 2006 à 11:49
si, car des petits details + des petits details bah sa devient vite un probleme important. En plus sa te prend meme pas 2sec a faire. Il me semble deja avoir vu ce script mais sans le css, le source et t'elle vraiment de toi. Je pensse que oui mais sait t'on jamais
CString Messages postés 20 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 19 avril 2007
4 sept. 2006 à 22:27
Oué on va pas disserter 20 ans sur des broutilles ...
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
4 sept. 2006 à 19:24
Hello,
juste pour dire que moi je suis pour que tu laisses le bout de html avec un echo, fermer et ouvrir les balises php pour des bricoles c'est vite insupportable à lire.
Ah et
s'écrit

Voilà :) à+
CString Messages postés 20 Date d'inscription samedi 18 septembre 2004 Statut Membre Dernière intervention 19 avril 2007
4 sept. 2006 à 16:35
OK merci pour tes remarques je corrige de ce pas ;)
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
4 sept. 2006 à 16:20
Salut!
J'ai quelques commentaires précis:
- je vois pas pk tu echo ton style, tu pourrais le sortir du bloc
php

- on préfère <?php à <? qui peut poser des pbs de compatibilité sur certains serveurs

- # $dir = opendir($rep);
# while ($f = readdir($dir))
>> Il manque, entre ces deux lignes, un test pozr vérifier que opendir s'est bien déroulé

- utilisation de ' ' au lieu de " ", chaque fois que possible

- # echo "";
# echo "
";
>>

echo '

';
// tu peux fusionner...

Voilà!

@++

R@f
Rejoignez-nous