Bonjour,
j'ai une fonction d'explorateur qui ne fonctionne
plus tres bien sous php5...
Le but etant d'explorer un repertoire et d'afficher
tous les dossiers de manières recursives, et
d'avoir sur chaque dossier un lien qui activera dans
une autre page (ou frameset) tous les fichiers qu'il contient...
J'aimerais la remplacer avec la nouvelle fonction
scandir, mais je n'y arrive pas...
Voila la pertie de fonction qui a l'air de merder..
et je voudrais la remplacer par quelque chose comme ça...
function ExploreRepertoire($chemin)
{
$tabrep = scandir($chemin);
for($i = 0; $i < count($tabrep); $i++)
{
if ( $tabrep[$i] == '.' || $tabrep[$i] == '..' )
{ unset($tabrep[$i]); }
}
sort ($tabrep);
}
Mais ça marche pas... je n'ai pas mis toute la fonction,
car il y'a plein d'html de partout...
Mais je cherche à la faire fonctionner en php5, et si possible
avec cettes fonction scandir qui a l'air de reduire pas mal le code...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Bonjour,
Bonjour,
Voila la partie de fonction qui a l'air de merder..
function ExploreRepertoire($chemin) {
« $tabRep = array(); » au début ne peut pas faire de mal.
Au passage, j'éviterais les variables capitalisées car on a vite fait de remplacer un « $tabRep » par un « $tabrep »... et plouf !
$repind = 0; $handle = @opendir($chemin);
Tu as simplifié le code, ou tu ne testes vraiment pas le retour de cet appel de fonction ? Il serait sage de le faire, d'autant que tu ignores tous les codes d'erreur avec « @ ».
Même s'il y a toutes les chances que les deux premières entrées soient '.' et '..', pour ma part je testerais plutôt le cas dans la boucle (comme tu le fais pour scandir).
$niveau++; while ($file = @readdir($handle))
Attention, ta boucle s'arrêtera trop tôt dans certains cas, par exemple si tu as un fichier qui s'appelle "0".
RTFM : <http://fr.php.net/manual/fr/function.readdir.php> /* Ceci est la façon correcte de traverser un dossier. */ while (false !== ($file = readdir($handle))) { echo "$filen"; }
/* Ceci est la MAUVAISE façon de traverser un dossier. */ while ($file = readdir($handle)) { echo "$filen"; } </>
{ if (is_dir("$chemin/$file")) { $tabRep[$repind] = $file; $repInd++;
Tiens, qu'est-ce que je disais à propos des variables capitalisées ! Tu aurais beau incrémenter $repInd tant que tu voudras, $repind vaudra toujours 0. Et plouf.
Au passage, tu n'as pas besoin de $repind/$repInd du tout. Il te suffit d'écrire : $tabRep[] = $file;
} } etc.......
et je voudrais la remplacer par quelque chose comme ça... function ExploreRepertoire($chemin) { $tabrep = scandir($chemin); for($i = 0; $i < count($tabrep); $i++) { if ( $tabrep[$i] == '.' || $tabrep[$i] == '..' ) { unset($tabrep[$i]); } }
Ça me semble bien. Que donne print_r($tabrep) ?
sort ($tabrep);
À priori ça devrait être inutile puisque le tableau est déjà trié. Si tu veux juste renuméroter les index pour utiliser ensuite une boucle for() comme ci-dessus au lieu d'une boucle foreach(), « array_merge($tabrep) » devrait suffire.
}
Mais ça marche pas...
Hum... Il n'y a rien de pire en informatique que « ça marche pas ». Il se passe quoi exactement ? Pour une liste de fichiers donnée, que contient le tableau en sortie de boucle ?
Bonjour,
Bonjour,
Voila la partie de fonction qui a l'air de merder..
function ExploreRepertoire($chemin)
{
« $tabRep = array(); » au début ne peut pas faire de mal.
Au passage, j'éviterais les variables capitalisées car on a vite fait de
remplacer un « $tabRep » par un « $tabrep »... et plouf !
$repind = 0;
$handle = @opendir($chemin);
Tu as simplifié le code, ou tu ne testes vraiment pas le retour de cet
appel de fonction ? Il serait sage de le faire, d'autant que tu ignores
tous les codes d'erreur avec « @ ».
Même s'il y a toutes les chances que les deux premières entrées soient
'.' et '..', pour ma part je testerais plutôt le cas dans la boucle
(comme tu le fais pour scandir).
$niveau++;
while ($file = @readdir($handle))
Attention, ta boucle s'arrêtera trop tôt dans certains cas, par exemple
si tu as un fichier qui s'appelle "0".
RTFM :
<http://fr.php.net/manual/fr/function.readdir.php>
/* Ceci est la façon correcte de traverser un dossier. */
while (false !== ($file = readdir($handle))) {
echo "$filen";
}
/* Ceci est la MAUVAISE façon de traverser un dossier. */
while ($file = readdir($handle)) {
echo "$filen";
}
</>
{
if (is_dir("$chemin/$file"))
{
$tabRep[$repind] = $file;
$repInd++;
Tiens, qu'est-ce que je disais à propos des variables capitalisées !
Tu aurais beau incrémenter $repInd tant que tu voudras, $repind vaudra
toujours 0. Et plouf.
Au passage, tu n'as pas besoin de $repind/$repInd du tout. Il te suffit
d'écrire :
$tabRep[] = $file;
}
}
etc.......
et je voudrais la remplacer par quelque chose comme ça...
function ExploreRepertoire($chemin)
{
$tabrep = scandir($chemin);
for($i = 0; $i < count($tabrep); $i++)
{
if ( $tabrep[$i] == '.' || $tabrep[$i] == '..' )
{ unset($tabrep[$i]); }
}
Ça me semble bien. Que donne print_r($tabrep) ?
sort ($tabrep);
À priori ça devrait être inutile puisque le tableau est déjà trié. Si tu
veux juste renuméroter les index pour utiliser ensuite une boucle for()
comme ci-dessus au lieu d'une boucle foreach(), « array_merge($tabrep) »
devrait suffire.
}
Mais ça marche pas...
Hum... Il n'y a rien de pire en informatique que « ça marche pas ».
Il se passe quoi exactement ? Pour une liste de fichiers donnée, que
contient le tableau en sortie de boucle ?
Voila la partie de fonction qui a l'air de merder..
function ExploreRepertoire($chemin) {
« $tabRep = array(); » au début ne peut pas faire de mal.
Au passage, j'éviterais les variables capitalisées car on a vite fait de remplacer un « $tabRep » par un « $tabrep »... et plouf !
$repind = 0; $handle = @opendir($chemin);
Tu as simplifié le code, ou tu ne testes vraiment pas le retour de cet appel de fonction ? Il serait sage de le faire, d'autant que tu ignores tous les codes d'erreur avec « @ ».
Même s'il y a toutes les chances que les deux premières entrées soient '.' et '..', pour ma part je testerais plutôt le cas dans la boucle (comme tu le fais pour scandir).
$niveau++; while ($file = @readdir($handle))
Attention, ta boucle s'arrêtera trop tôt dans certains cas, par exemple si tu as un fichier qui s'appelle "0".
RTFM : <http://fr.php.net/manual/fr/function.readdir.php> /* Ceci est la façon correcte de traverser un dossier. */ while (false !== ($file = readdir($handle))) { echo "$filen"; }
/* Ceci est la MAUVAISE façon de traverser un dossier. */ while ($file = readdir($handle)) { echo "$filen"; } </>
{ if (is_dir("$chemin/$file")) { $tabRep[$repind] = $file; $repInd++;
Tiens, qu'est-ce que je disais à propos des variables capitalisées ! Tu aurais beau incrémenter $repInd tant que tu voudras, $repind vaudra toujours 0. Et plouf.
Au passage, tu n'as pas besoin de $repind/$repInd du tout. Il te suffit d'écrire : $tabRep[] = $file;
} } etc.......
et je voudrais la remplacer par quelque chose comme ça... function ExploreRepertoire($chemin) { $tabrep = scandir($chemin); for($i = 0; $i < count($tabrep); $i++) { if ( $tabrep[$i] == '.' || $tabrep[$i] == '..' ) { unset($tabrep[$i]); } }
Ça me semble bien. Que donne print_r($tabrep) ?
sort ($tabrep);
À priori ça devrait être inutile puisque le tableau est déjà trié. Si tu veux juste renuméroter les index pour utiliser ensuite une boucle for() comme ci-dessus au lieu d'une boucle foreach(), « array_merge($tabrep) » devrait suffire.
}
Mais ça marche pas...
Hum... Il n'y a rien de pire en informatique que « ça marche pas ». Il se passe quoi exactement ? Pour une liste de fichiers donnée, que contient le tableau en sortie de boucle ?
jjsolari
AT wrote:
[...]
et je voudrais la remplacer par quelque chose comme ça... function ExploreRepertoire($chemin) { $tabrep = scandir($chemin); for($i = 0; $i < count($tabrep); $i++) { if ( $tabrep[$i] == '.' || $tabrep[$i] == '..' ) { unset($tabrep[$i]); } } sort ($tabrep); }
AT,
La fonction scandir effectue un tri par défaut donc pas besoin de sort. Sinon voici une version qui devrait faire ce que tu souhaites :
function ExploreRepertoire( $chemin ) { $tabrep = array();