php, dossier et recursivité

php, dossier et recursivité - Programmation

Marsh Posté le 21-09-2001 à 22:03:18    

je suis pas 'nouveau' du php mais j'ai jamais fait que des ptits trucs bidons...
la pour lire lister totalité d'un dossier et donner sa taille totale, j'ai fais comme en c , j'ai fais une fonction récursive qui fera les sous répertoires et les sous-sous et les sous-sous-sous etc....
 
seulement voila j'ai jamais fais de récursivité en php et j'espère que c pas à cause d'une persistence de variable ou une autre diff par rapport au C qui fait que ca marche pas....
 
voila le programme :
 
 
 
<?
//fonction read_dir_red ( taille en ce point, nom du dossier, nombre d'espace à afficher)
 
function read_dir_rec($int_taille,$chaine_dossier,$int_tab)
 
 {
 chdir($chaine_dossier);
 $dir_dossier=dir($chaine_dossier);
//on saute ./ et ../
 $dir_dossier->read();
 $dir_dossier->read();
//tant que y a foule on lit, si c un dossier on le lit aussi
 while ($fichier=$dir_dossier->read())
  {
  for ($cpt=0;$cpt<$int_tab;$cpt++)
   echo "   ";
  if (is_dir($fichier))
   {
   echo "+$fichier {dossier}<BR>";
   $int_taille+=read_dir_rec(0,$fichier,$int_tab+1);
   }
  else
   {
   echo "-$fichier ".(int)(filesize($fichier)/1024)." Ko<BR>";
   $int_taille+=filesize($fichier);
   }
  }
 
 for ($cpt=0;$cpt<$int_tab;$cpt++)
  echo "   ";
 echo "[taille totale de ".$dir_dossier->path.". : ".(int)($int_taille/1024)." Ko]<BR>";
 chdir("../" );
 return $int_taille;
 }
echo "<BR><B>Taille totale : ".(int)(read_dir_rec(0,"./",1)/1024)." Ko</B>";
?>
 
et voila un exemple d'éxécution..je pense que ca viens d'une propriété de php que je connaitrais pas
(comme la plupart du temps, le problème doit etre tout con)
 
voila un exemple d'éxécution
 
   -image.php 1 Ko
   -index.php 8 Ko
   -site.php 0 Ko
   -news.html 0 Ko
   -index2.php 8 Ko
   -view.php 12 Ko
   -nico.txt 1 Ko
   +IMAGES {dossier}
      -pageimage.GIF 0 Ko
      -arriere_plan.gif 3 Ko
      -pageaccueil.jpg 0 Ko
      -pageimage2.jpg 0 Ko
      -indextech_games___argent_fa.jpg 0 Ko
      -wallpaperssophie_marceau.jpg 0 Ko
      -ex_humpf2.html 0 Ko
      -image_humpf2.jpg 0 Ko
      -image_laterale.jpg 0 Ko
      -image_bloc_haut.jpg 0 Ko
      -is_single_pixel_gif.gif 0 Ko
      -structureaccueil.jpg 0 Ko
      -structureimage.jpg 0 Ko
      -centreimage.jpg 0 Ko
      -menu.gif 59 Ko
      -logo.jpg 7 Ko
      [taille totale de IMAGES. : 70 Ko]
   -Copie de index.php 6 Ko
   -index-fini.php 8 Ko
   -dl.zip 9 Ko
   -couleurs.txt 0 Ko
   -Copie de index-fini.txt 8 Ko
   +dl {dossier}
      -admin.php 0 Ko
      -cfg.php3 0 Ko
      -Copie de model.html 0 Ko
      -dl.php 0 Ko
      -dlc.php 0 Ko
      -download.php 0 Ko
      -installation.txt 0 Ko
      -Nouveau Texte seulement.txt 0 Ko
      -popup.html 0 Ko
      -script dl.txt 0 Ko
      -downloads.html 0 Ko
      -downloads.php 0 Ko
      -Copie de Copie de model.htm 0 Ko
      -Copie de sauvegardeCopie de model.html 0 Ko
      -essayer.php 0 Ko
      -style.css 0 Ko
      [taille totale de dl. : 0 Ko]
   -doss-provisoire.php 9 Ko
   -doss-avecimages.php 8 Ko
   -doss.php 8 Ko
   -passnico.txt 0 Ko
   -doss temporaire.php 9 Ko
   -index ancien.php 8 Ko
   -old image.php 2 Ko
   -doss ancien.php 7 Ko
   -taille.php 0 Ko
   -essai.php 0 Ko
   -taille2.php 0 Ko
   [taille totale de ./. : 195 Ko]
 
Taille totale : 195 Ko
 
la plupart sont à 0 c normal, mais pour les fichiers du répertoires DL et IMAGES, tous sont >0
mais le truc c'est qu'il a  juste pouyr par exemple IMAGES/menu.gif qui fait 59,8 Ko
 
???

Reply

Marsh Posté le 21-09-2001 à 22:03:18   

Reply

Marsh Posté le 21-09-2001 à 22:35:38    

Une variable dans une fonction n'existe pas en dehors de cette fonction sauf si tu la définis : global $a;
 
Voili, c'est tout ce que je sais.
J'espère que ca pourra t'aider.


---------------
oui oui
Reply

Marsh Posté le 22-09-2001 à 02:08:13    

Salut
 
Je n'ai pas tout vérifié, mais il y a un problème avec l'appel récursif de la fonction :
 
$int_taille+=read_dir_rec(0,$fichier,$int_tab+1);  
 
qui devrait être :
 
$int_taille+=read_dir_rec($int_taille,$fichier,$int_tab+1);  
 
A+

Reply

Marsh Posté le 22-09-2001 à 18:11:20    

nan nan si tu fais ca tu va ajouter avec la taille des sous dossiers la taille déjà comptée dans les répertoire du dessus, bref un beau bordel
 
meme si y avait un problème là ,je pense que ca doit venir du répertoire courant qu'il considère
 
j'ai déjà fait plein d'essais avec différentes manières mais je crois que je vais rester dans ./ et pour chaque fichier ajouter une variable $PATH devant, qui contiendra tous les noms des sous dossiers
 
chaque fichier sera désigner par son chemin complet depuis le répertoire d'éxécution...
 
j'y crois j'y crois :)

Reply

Marsh Posté le 22-09-2001 à 18:50:59    

voila ca n'a surement que peu d'interet mais bon :
 
il y avait surement un problème pour que la fonction se situe correctement dans l'arborescence...
 
donc plutot que de faire des chdir, il fallait prendre en compte l'arborescence supérieure dans chaque appel pour pouvoir considérer tous les fichiers du répertoire de départ
 
ca donne ca :
 
<?
//crée l'indentation
function affiche_espace($nombredespace)
        {
        for ($cpt=0;$cpt<$nombredespace;$cpt++)
                echo "   ";
        }
 
 
function read_dir_rec($chaine_dossier,$int_tab)
        {
        $int_taille=0;
        $dir_dossier=dir($chaine_dossier);
//on enleve les ./ et ../
        $dir_dossier->read();
        $dir_dossier->read();
 
        while ($chaine_fichier=$dir_dossier->read())
                {
                $chaine_fichier_complete=$chaine_fichier;
                $chaine_fichier_complete=$chaine_dossier.$chaine_fichier;
                if (is_dir($chaine_fichier_complete))
                        {
                        affiche_espace($int_tab);
                        echo "+$chaine_fichier Dossier<BR>";
                        $int_taille+=read_dir_rec($chaine_fichier_complete."/",$int_tab+1);    
                        }
                else
                        {
                        affiche_espace($int_tab);
                        $int_taillefichier=filesize($chaine_fichier_complete);
                        echo "-$chaine_fichier $int_taillefichier<BR>";
                        $int_taille+=$int_taillefichier;
                        }
                }
        affiche_espace($int_tab);
        echo "(-)taille totale du sous dossier : $int_taille<BR>";
        return $int_taille;
        }
$taille=(int)(read_dir_rec("./",0)/1024);
echo "Taille totale du répertoire courant : <B>$taille<B/> Ko<BR>";
?>
 
et au final ceci :
 
-image.php 1595
-index.php 9033
-site.php 30
-news.html 846
-index2.php 8380
-view.php 12489
-nico.txt 1519
+IMAGES Dossier
   -barre.jpg 7738
   -is_single_pixel_gif.gif 43
   -ex-haut2.gif 33501
   -ex-barre2.jpg 7633
   -ex-haut.jpg 121438
   -centre.gif 3711
   -newsndex.jpg 37965
   -arriere_plan.gif 3711
   -ex-haut.gif 33501
   -ex-barre.jpg 7633
   -ex-logo.gif 10036
   -ex-logo2.jpg 7539
   -suivant.gif 2829
   -precedent.gif 3352
   -retour.gif 253
   -barrehorz.gif 771
   -suite.gif 2551
   +images Dossier
      -pageimage.GIF 34160
      -arriere_plan.gif 3711
      -pageaccueil.jpg 58059
      -pageimage2.jpg 7607
      -indextech_games___argent_fa.jpg 75161
      -wallpaperssophie_marceau.jpg 103436
      -ex_humpf2.html 131
      -image_humpf2.jpg 18190
      -image_laterale.jpg 6001
      -image_bloc_haut.jpg 12953
      -is_single_pixel_gif.gif 43
      -structureaccueil.jpg 58295
      -structureimage.jpg 36596
      -centreimage.jpg 16079
      -menu.gif 43449
      -logo.jpg 7539
      (-)taille totale du sous dossier : 481410
   +lettres Dossier
      -z.jpg 724
      -i.jpg 657
      -j.jpg 658
      -y.jpg 676
      -t.jpg 682
      -p.jpg 698
      -f.jpg 701
      -c.jpg 702
      -u.jpg 706
      -a.jpg 713
      -e.jpg 715
      -g.jpg 716
      -r.jpg 718
      -v.jpg 718
      -d.jpg 719
      -k.jpg 719
      -b.jpg 721
      -o.jpg 722
      -l.jpg 647
      -h.jpg 726
      -s.jpg 728
      -n.jpg 737
      -q.jpg 737
      -x.jpg 740
      -w.jpg 743
      -m.jpg 748
      (-)taille totale du sous dossier : 18471
   -ex-menu.gif 60688
   +eximages Dossier
      -suivant.gif 2829
      -barre.gif 129558
      -barrehorz.gif 771
      -centre.gif 3711
      -ex-barre.jpg 7633
      -ex-haut.gif 33501
      -ex-logo.gif 10036
      -haut.bmp 345614
      -haut.gif 345614
      -is_single_pixel_gif.gif 43
      -logo.bmp 34902
      -logo.gif 34902
      -menu.gif 43449
      -newsndex.jpg 37965
      -precedent.gif 3352
      -retour.gif 253
      -suite.gif 2551
      -barre.bmp 129558
      (-)taille totale du sous dossier : 1166242
   -haut2.gif 33501
   -ex-logo2.gif 34902
   -ex-barre.gif 129558
   -haut.gif 33501
   -logo.jpg 7539
   -menu.gif 60688
   (-)taille totale du sous dossier : 2310705
-Copie de index.php 6661
-index-fini.php 9121
-dl.zip 9739
-couleurs.txt 23
-Copie de index-fini.txt 9121
+dl Dossier
   +dl Dossier
      -admin.php 8122
      -cfg.php3 107
      -Copie de model.html 6583
      -dl.php 631
      -dlc.php 1288
      -download.php 5973
      -installation.txt 629
      -Nouveau Texte seulement.txt 0
      -popup.html 168
      -script dl.txt 2206
      -downloads.html 28
      -downloads.php 10130
      -Copie de Copie de model.htm 8706
      -Copie de sauvegardeCopie de model.html 9172
      -essayer.php 6693
      -style.css 200
      (-)taille totale du sous dossier : 60636
   (-)taille totale du sous dossier : 60636
-doss-provisoire.php 10067
-doss-avecimages.php 9105
-doss.php 8753
-passnico.txt 47
-doss temporaire.php 10067
-index ancien.php 9155
-old image.php 2460
-doss ancien.php 8090
-taille.php 817
-essai.php 144
-taille2.php 1003
-taille3.php 1544
(-)taille totale du sous dossier : 2501150
Taille totale du répertoire courant : 2442 Ko

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed