Tom's Guide > Forum > Programmation > [Résolu] Lister TOUTES les images d'un repertoire et des sous repertoires ..

[Résolu] Lister TOUTES les images d'un repertoire et des sous repertoires ..

Forum Programmation : [Résolu] Lister TOUTES les images d'un repertoire et des sous repertoires ..

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !

Lire la meilleure réponse, apportée par crazycat@idn.

Mot :    Pseudo :           
 

Salut !

Je cherche (deseserement) un script qui me permette de lister toutes les images ( png pour le coup) d'un repertoire et de ses sous repertoire ..
et que je "recupere" le chemin de chaque image ... genre :
echo $chemin'/'$fichiers:

qui me donne

repertoire/a/df/thumbs/image.png

Est ce possible en php ?

Tu mets dans ton fichier la liste des urls, et quand tu veux te servir du fichier, tu fais:

Code :
  1. <?php
  2. $pics = file('fichier_cache');
  3. shuffle($pics);
  4. $newpics = array_slice($pics, 0, 35);
  5. foreach ($newpics as $k => $pic) {
  6.   echo '<li><a target="_blank" href="http://www.dogo-canario.fr/pedigree/"><img height="100" src="'.$pic.'"></a></li>';
  7. }
  8. ?>



Et pour générer ton fichier:

Code :
  1. <?php
  2. if ((time() - filemtime('fichier_cache')) > 3600) {
  3.   // Fichier modifié depuis plus d'une heure
  4.   $fp = fopen('fichier_cache');
  5.   $pics = scanDirectories("pedigree/thumb" );
  6.   foreach($pics as $k => $pic) {
  7.       fputs($fp, $pic.chr(13).chr(10));
  8.   }
  9. }
  10. ?>

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

je doit pouvoir retrouvais quelque par dans mais milliard de fichier ... un script qui liste tous les fichier dont le nom comporte plus de 7 caractère ( extension compris dont une pour image en png c'est 3 puisque .png sa fais 4 ^^ )
et ce script fais un tableur pour les afficher ^^

mais il liste pas les sous dossier -_-'' je poste sa des que je le retrouve

------------------------------ XD --> peut aussi se dessiner --> XP
Microsoft se fout-il pas ne notre tete avec son XP ???
Répondre à andrelec1

Salut !

pour "scanner" un repertoire precis . je sais faire ..

Mais là, je doit "fouiller" les sous repertoires sur 23 voir 4 niveaux ...
et recup le nom et l'url relative du fichier ...

(pour faire une balise img )

j'ai ca comme code :

<?

$a = 0;

$handle = opendir("plugins/kissgallery/photos" );

while (($file = readdir())!=false) {

clearstatcache();

if($file!=".." && $file!="." && substr($file, -5, 1)=="s" )

{
echo '<li style="text-align: center;"><img height="100" src="/plugins/kissgallery/photos/'.$file.'" alt="Cliquez ici" ></li>';

}

}

closedir($handle);

?>

Répondre à Ambigua

Tu peux essayer avec scandir() qui est justement là pour ça.

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

Oui, j'ai vu Scandir, mais j'ai pas trouvé un script "complet" pour le faire .
je fait pas bien programmer .. ( je suis LARGEMENT meilleur en copier/coller :D )

Car ce que je trouve ne scanne QUE le rep . et n'ouvre pas les sous rep ...
Et surtout ne permet pas de recup l'URL

Dans mon cas, je doit recup TOUS les fichiers png d'un ensemble de rep contenu dans /photo/ ..
et le chemin relatif correspondant a chaque fichier ..

Répondre à Ambigua

Pourtant, il suffisait de regarder un peu plus bas dans la page donnée:

Code :
  1. <?php
  2. function getDirectoryTree( $outerDir , $x){
  3.     $dirs = array_diff( scandir( $outerDir ), Array( ".", ".." ) );
  4.     $dir_array = Array();
  5.     foreach( $dirs as $d ){
  6.         if( is_dir($outerDir."/".$d)  ){
  7.             $dir_array[ $d ] = getDirectoryTree( $outerDir."/".$d , $x);
  8.         }else{
  9.         if (($x)?ereg($x.'$',$d):1)
  10.             $dir_array[ $d ] = $d;
  11.             }
  12.     }
  13.     return $dir_array;
  14. }
  15. $dirlist = getDirectoryTree('filmes','flv');
  16. ?>

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

Salut !

Enffet, ce script semble convenir .. MAIS .. comment "recupere" les variables ??

car moi, pas assez bon pour ça :heink: :whistle:

pour chaque fichier *.png, je veut faire un :
echo '<img src= '$chemin/$fichier.png'> ..
pour afficher TOUTES les images png dans les sous repertoires ;;
c'est la recup des "variables qui me coince ...

Répondre à Ambigua

re !

Bon, je suis arrivé a adapter un truc ...

Code :
  1. <?php
  2. function scanDirectories($rootDir, $allData=array()) {
  3.     // set filenames invisible if you want
  4.     $invisibleFileNames = array(".", "..", ".htaccess", ".htpasswd" );
  5.     // run through content of root directory
  6.     $dirContent = scandir($rootDir);
  7.     foreach($dirContent as $key => $content) {
  8.         // filter all files not accessible
  9.         $path = $rootDir.'/'.$content;
  10.         if(!in_array($content, $invisibleFileNames)) {
  11.             // if content is file & readable, add to array
  12.             if(is_file($path) && is_readable($path)) {
  13.                 // save file name with path
  14.                 $allData[] = $path;
  15.             // if content is a directory and readable, add path and name
  16.             }elseif(is_dir($path) && is_readable($path)) {
  17.                 // recursive callback to open new directory
  18.                 $allData = scanDirectories($path, $allData);
  19.             }
  20.         }
  21.     }
  22.     return $allData;
  23. }
  24. print_r(scanDirectories("pedigree/thumb" ));
  25. ?>



Qui me retourne :

Citation :

Array ( [0] => pedigree/thumb/0/0/afdd717dead3a878e6564b9800.png [1] => pedigree/thumb/0/0/b2415de3c6c624dfa8780134d00.png [2] => pedigree/thumb/0/1/b0dbeff0c40f7f2200e657ee10.png [3] => pedigree/thumb/0/1/b4feecaa12807687710.png [4] => pedigree/thumb/0/2/b00d25ccbdf357382f5bc400220.png [5] => pedigree/thumb/0/2/b01118c3d2b157c73e578984520.png [6] => pedigree/thumb/0/2/b0468cf8a79acc296becbf9120.png [7] => pedigree/thumb/0/3/b14f0654271e44456b979dde30.png [8] => pedigree/thumb/0/4/affdf50682f71dfd0c737786340.png [9] => pedigree/thumb/0/4/b00e2d8d491475bc2c94c6ad040.png [10] => pedigree/thumb/0/5/afdd5269ea62fbe92a484196050.png [11] => pedigree/thumb/0/5/afde132c9ef42c723a5b0f10250.png [12] => pedigree/thumb/0/5/afdf84a44f4156d1fdedfed4b50.png [13] => pedigree/thumb/0/5/b00d275b16912807d0f64bf4650.png [14] => pedigree/thumb/0/5/b0c285302ec606653ba3e316950.png [15] => pedigree/thumb/0/5/b4bb7c966956efefb50.png [16] => pedigree/thumb/0/6/b281dfd46c92a159860.png [17] => pedigree/thumb/0/7/b09dce0b04b4fedeca43f8ff070.png [18] => pedigree/thumb/0/7/b3c21bd85d632cb4b70.png [19] => pedigree/thumb/0/7/b4bb800da014bfb7c70.png [20] => pedigree/thumb/0/8/afe2b0470cd546a0d8317621b80.png [21] => pedigree/thumb/0/8/b059d342bd01b074c66ee240580.png [22] => pedigree/thumb/0/8/b0caf8a8c8528300f4bdf3bd280.png [23] => pedigree/thumb/0/8/b24c9ea46e42d0670f263681080.png [24] => pedigree/thumb/0/9/afe2ad0a6bc566e5c6440cbef90.png [25] => pedigree/thumb/0/9/afe3240f547bbdb9b27de73f90.png [26] => pedigree/thumb/0/9/afe336cad8d53df6a7206eba990.png [27] => pedigree/thumb/0/9/b054ffd2dd579a6fa69264ffa90.png [28] => pedigree/thumb/0/9/b0643376ecc395f0273071bd90.png [29] => pedigree/thumb/0/9/b281e361e4e72f9b690.png [30] => pedigree/thumb/0/9/b3b1fbbf0c43e2b6590.png [31]



alors là, moi je butte ..

je veut seulement :

Citation :

pedigree/thumb/0/0/afdd717dead3a878e6564b9800.png
pedigree/thumb/0/0/b2415de3c6c624dfa8780134d00.png
pedigree/thumb/0/1/b0dbeff0c40f7f2200e657ee10.png
pedigree/thumb/0/1/b4feecaa12807687710.png
pedigree/thumb/0/2/b00d25ccbdf357382f5bc400220.png
....


Répondre à Ambigua

Donc, tu modifies la fin:

Code :
  1. <?php
  2. $pics = scanDirectories("pedigree/thumb" );
  3. foreach ($pics as $k => $pic) {
  4.   echo '<img src="'.$pic.'" />';
  5. }
  6. ?>

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

MERCI !!

Ca marche !

Par contre, .. va falloir que je trouve un truc pour "limiter" le nombre ...

Car voila, j'ai 900 et quelques images dans les sous rep ..
je veux faire un carousel
j'en ai un qui marche, mais avec un rep de 25 images => http://www.dogo-canario.fr/code2.php

Celui que je viens de "programmer (avec ton aide .. :whistle: ) "pointe" le rep de 900 images ..
donc ca "bugge un peu" ...
=> http://www.dogo-canario.fr/essai.php

comment m'y prendre pour limiter a .. 25 ou 50 images .. mais de facon aléatoire .. :sarcastic: pour pas toujours avoir les mêmes .. ?

Dans l'idée, ca serai de generer un nombre aléatoire entre 0 et 25 qu'on appelle $rand.. et de prendre un fichier tous les $rand .

C'est la solution ? ou y'a mieux ?


Répondre à Ambigua

Le plus simple, en restant sur ton principe actuel (donc la recherche de tous les fichiers au départ) serait d'ensuite manipuler ton tableau comme ça:

Code :
  1. <?php
  2. $pics = scanDirectories("pedigree/thumb" );
  3. shuffle($pics);
  4. $newpics = array_slice($pics, 0, 25);
  5. foreach ($newpics as $k => $pic) {
  6.   echo '<img src="'.$pic.'" />';
  7. }
  8. ?>


Par contre, je te conseillerai d'utiliser un système de cache pour ne pas chaque fois faire le tour de tous tes répertoires.

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

crazycat@idn a écrit :


Par contre, je te conseillerai d'utiliser un système de cache pour ne pas chaque fois faire le tour de tous tes répertoires.



Salut !

CA MARCHE !!!! :bounce:
:D

Merci !!

Comment tu ferai pour "mettre en cache" ?
car la .. aucun idée du "systeme" .. :whistle:

Bon, je mets mon code entier .. si ca peut servir a quelqu'un !!:

Code :
  1. <head> 
  2. <script type="text/javascript" src="jquery.js"></script>
  3. <script type="text/javascript" src="jcarousellite.js"></script>
  4. <style type="text/css">
  5. #conteneur
  6. {
  7. width:150px;
  8. height:100px;
  9. overflow:hidden;
  10. }
  11. li
  12. {
  13. width:150px;
  14. height:108px;
  15. overflow:hidden;
  16. }
  17. </style>
  18. <script type="text/javascript">
  19. $(function() {
  20.     $(".anyClass" ).jCarouselLite({
  21.     auto: 1000,
  22. visible: 10,
  23.     speed: 1000
  24.     });
  25. });
  26. </script>
  27. </head> 
  28. <body> 
  29. <center>
  30. <div class="anyClass">
  31.     <ul>
  32. <?php
  33. function scanDirectories($rootDir, $allData=array()) {
  34.     // set filenames invisible if you want
  35.     $invisibleFileNames = array(".", "..", ".htaccess", ".htpasswd" );
  36.     // run through content of root directory
  37.     $dirContent = scandir($rootDir);
  38.     foreach($dirContent as $key => $content) {
  39.         // filter all files not accessible
  40.         $path = $rootDir.'/'.$content;
  41.         if(!in_array($content, $invisibleFileNames)) {
  42.             // if content is file & readable, add to array
  43.             if(is_file($path) && is_readable($path)) {
  44.                 // save file name with path
  45.                 $allData[] = $path;
  46.             // if content is a directory and readable, add path and name
  47.             }elseif(is_dir($path) && is_readable($path)) {
  48.                 // recursive callback to open new directory
  49.                 $allData = scanDirectories($path, $allData);
  50.             }
  51.         }
  52.     }
  53.     return $allData;
  54. }
  55. $pics = scanDirectories("pedigree/thumb" );
  56. // ==on mets le repertoire a scanner
  57. shuffle($pics);
  58. $newpics = array_slice($pics, 0, 35);
  59. foreach ($newpics as $k => $pic) {
  60. echo '<li><a target="_blank" href="http://www.dogo-canario.fr/pedigree/"><img height="100" src="'.$pic.'"></a></li>';
  61. //On ecrit le lien de chaque fichier
  62.   }
  63. ?>
  64. </ul>
  65. </div></center>
  66. </body>


Répondre à Ambigua

Pour mettre en cache, la solution la plus simple à mon avis est de mettre le listing dans un fichier, et de réécrire ce fichier s'il à plus d'une certaine durée (par exemple 24h).
Donc, la fonction te sert à remplir ce fichier (si besoin est), et quoi qu'il advienne, tu travaille avec le contenu de ce fichier.

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

Salut !

Ecrire un fichier .. oué .. ca je crois savoir faire .. :whistle: (je l'ai déja fait pour autre chose .. )

Donc dans ce fichier, on met la liste d'url ??
et on "chope" X lignes a chaque fois ? c'est ca ?

Car y'a un truc que j'ai trouvé, mais je sais pas du tout si c'est applicable
=> http://classes.scriptsphp.org/example.cache.1

Peut on mettre en cache une fonction ? ou c'est le resultat ? :??: car la, moi, chui perdu ! :heink:

Répondre à Ambigua
Meilleure réponse

Tu mets dans ton fichier la liste des urls, et quand tu veux te servir du fichier, tu fais:

Code :
  1. <?php
  2. $pics = file('fichier_cache');
  3. shuffle($pics);
  4. $newpics = array_slice($pics, 0, 35);
  5. foreach ($newpics as $k => $pic) {
  6.   echo '<li><a target="_blank" href="http://www.dogo-canario.fr/pedigree/"><img height="100" src="'.$pic.'"></a></li>';
  7. }
  8. ?>



Et pour générer ton fichier:

Code :
  1. <?php
  2. if ((time() - filemtime('fichier_cache')) > 3600) {
  3.   // Fichier modifié depuis plus d'une heure
  4.   $fp = fopen('fichier_cache');
  5.   $pics = scanDirectories("pedigree/thumb" );
  6.   foreach($pics as $k => $pic) {
  7.       fputs($fp, $pic.chr(13).chr(10));
  8.   }
  9. }
  10. ?>


Message édité par crazycat@idn le 05-11-2009 à 18:46:47
------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

Salut !

Merci !

MAIS .. :D

Tu as oublié de donner un parametre a fopen ('file",'r+') par exemple .. :sarcastic:

Et chr(13) suffit, sinon, ca fait des lignes vides ..

Sinon, c'est Nickel !

Vous pouvez tester en live sur le site www.dogo-canario.fr

J'ai meme enrichi mon script d'un lien ..

voici le scipt complet :

Code :
  1. <head> 
  2. <script type="text/javascript" src="jquery.js"></script>
  3. <script type="text/javascript" src="jcarousellite.js"></script>
  4. <style type="text/css">
  5. #conteneur
  6. {
  7. width:10%;
  8. height:8%;
  9. overflow:hidden;
  10. }
  11. li
  12. {
  13. width:10%;
  14. height:100px;
  15. overflow:hidden;
  16. }
  17. </style>
  18. <script type="text/javascript">
  19. $(function() {
  20.     $(".anyClass" ).jCarouselLite({
  21.     auto: 1000,
  22. visible: 10,
  23.     speed: 800
  24.     });
  25. });
  26. </script>
  27. </head> 
  28. <body> 
  29. <center>
  30. <div class="anyClass">
  31.     <ul>
  32. <?php
  33. function scanDirectories($rootDir, $allData=array()) {
  34.     // set filenames invisible if you want
  35.     $invisibleFileNames = array(".", "..", ".htaccess", ".htpasswd" );
  36.     // run through content of root directory
  37.     $dirContent = scandir($rootDir);
  38.     foreach($dirContent as $key => $content) {
  39.         // filter all files not accessible
  40.         $path = $rootDir.'/'.$content;
  41.         if(!in_array($content, $invisibleFileNames)) {
  42.             // if content is file & readable, add to array
  43.             if(is_file($path) && is_readable($path)) {
  44.                 // save file name with path
  45.                 $allData[] = $path;
  46.             // if content is a directory and readable, add path and name
  47.             }elseif(is_dir($path) && is_readable($path)) {
  48.                 // recursive callback to open new directory
  49.                 $allData = scanDirectories($path, $allData);
  50.             }
  51.         }
  52.     }
  53.     return $allData;
  54. }
  55. if ((time() - filemtime('list.php')) > 86400) {
  56.     $fp = fopen('list.php','r+');
  57.     $pics = scanDirectories("pedigree/thumb" );//repertoire a renseigner pour le scan
  58.     foreach($pics as $k => $pic) {
  59.         fputs($fp, $pic.chr(10));
  60.                     }
  61.     }
  62. $pics = file('list.php');
  63. shuffle($pics);
  64. $newpics = array_slice($pics, 0, 60);
  65. foreach ($newpics as $k => $pic) {
  66. //pour construire l'url du lien
  67. $lien = str_replace("/thumb/","/img/",$pic);
  68. $lien1 = str_replace(".png",".html",$lien);
  69. // fin url
  70.     echo '<li><a target="_blank" href="'.$lien1.'"><img height="96px" src="'.$pic.'"></a></li>';
  71.   }
  72. ?>
  73. </ul>
  74. </div></center>
  75. </body>

Répondre à Ambigua

Ah oui, désolé pour l'option de lecture. A ta place, je mettrais simplement 'w' plutôt que 'r+'.
Et tu ne devrais pas mettre l'extension .php mais plutôt .txt ou .db, c'est moins risqué.

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

Salut !

Ok, je modifie par w ..

;)

Mais pour le .txt ou .db ;; les deux peuvent etre afficher "brut" dans le navigateur ... pas le php .
donc pourquoi moins risquer ? :??:

Pour info, si ca interrresse quelqu'un, je peut lui envoyer par mail le fichier source, les .js en zip ..

Répondre à Ambigua

Ton fichier .php ne contient pas d'instructions php, il sera donc affiché comme un fichier texte. La preuve: http://www.dogo-canario.fr/list.php
Le mieux serait encore de l'appeler .htlist , il sera automatiquement bloqué (en affichage) par le serveur (s'il est bien configuré)

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

Voila qui est modifié ;)

Merci pour tout !
T 'est super cool !

Répondre à Ambigua
Tom's Guide > Forum > Programmation > [Résolu] Lister TOUTES les images d'un repertoire et des sous repertoires ..
Aller à :

Il y a 579 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Liens