begin process at 2012 05 28 17:18:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Divers

 > 

Besoin d'aide pour un script.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Besoin d'aide pour un script.

lundi 30 août 2010 à 09:06:06 | Besoin d'aide pour un script.

Yodelei

Bonjour à tous,

Je cherche à réaliser un script qui liste tous les dossiers et sous-dossiers d'un disque de manière récursive et surtout de stocker chaque entrée dans une variable "array". Voici le code que j'utilise pour le moment.
Code PHP :
//Liste les dossiers de maniere récursive
function liste_rep($src_dir, $tabl_dir=array()) {
    $dir = opendir($src_dir);
    while($nom = readdir($dir)) {
	if ($nom != "." && $nom != "..") {
	    $chemin=$src_dir ."/". $nom;
	    if (is_dir($chemin)) {
	        echo $chemin."<br>";
		array_push($tabl_dir, $chemin);
		liste_rep($chemin);
	    }
	}
    }
    closedir($dir);
    return $tabl_dir;
}

define("ROOT", "F:/Web/");

$List_Dir = liste_rep(ROOT);


Il fonctionne bien. la line "echo $chemin."<br>";" me retourne ce que je souhaite stocker, à savoir :
Code :
........
F:/Web//Developpement
F:/Web//Developpement/Ajax
F:/Web//Developpement/Ajax/dossierTest
F:/Web//Developpement/Ajax/dossierTest/case
F:/Web//Developpement/Ajax/dossierTest/Documents
F:/Web//Developpement/Ajax/dossierTest/Documents/CV & Lettres de motivation
F:/Web//Developpement/Ajax/dossierTest/Documents/Projets Entreprise
F:/Web//Developpement/Ajax/dossierTest/Documents/Recettes Cuisine
F:/Web//Developpement/Ajax/dossierTest/Documents/Recettes Cuisine/Pizzas
F:/Web//Developpement/Ajax/dossierTest/Documents/Recettes Cuisine/Soupes & Veloutés
F:/Web//Developpement/Ajax/dossierTest/Images
F:/Web//Developpement/Ajax/dossierTest/Musiques
F:/Web//Developpement/Ajax/dossierTest/Paquets
F:/Web//Developpement/Ajax/dossierTest/Vidéos
F:/Web//Developpement/Ajax/images
......


Le problème, c'est que ma array ne contient que le premier niveau de dossiers...
Code :
F:/Web//00-temp
F:/Web//Administratif
F:/Web//Developpement
F:/Web//Intranet
F:/Web//Modeles UML
F:/Web//Photos_collaborateurs
F:/Web//serveur
F:/Web//serveur_test
F:/Web//SiteWeb_MC
F:/Web//SiteWeb_MC_Archives
F:/Web//test
F:/Web//ToolBox
F:/Web//www

Et je souhaiterais avec toutes les entrées dans mon array.

La finalité de ce code serait de stocker dans une BDD le chemin, nom du fichier, extension, taille et dernière modif, afin de créer un petit moteur de recherche pour nos archives.

Si vous avez une bonne idée, je suis preneur. :)

lundi 30 août 2010 à 10:50:32 | Re : Besoin d'aide pour un script.

TychoBrahe

Réponse acceptée !
Salut,

Une solution est de faire retourner à ta fonction un tableau contenant tout ce qu'elle à listé, ainsi avec un simple array_merge() on peut récupérer le résultat des appels récursifs. Voici un exemple d'implémentation sur lequel j'ai changé 2 ou 3 trucs (y compris le style) :

Code PHP :
<?php

function liste_rep($src_dir, $tabl_dir=array())
{
  if (substr($src_dir, -1) != '/')
    $src_dir .= '/';
  $dir = scandir($src_dir);
  if ($dir === false)
    return array();
  $list = array();
  foreach($dir as $fileName)
    {
      if ($fileName[0] != '.')
        {
          $filePath = $src_dir . $fileName;
          echo $filePath, '<br>';
          if (is_dir($filePath))
            $list = array_merge($list, liste_rep($filePath));
          else
            $list[] = $filePath;
        }
    }
  return $list;
}

define('ROOT', 'F:/Web/');
var_dump(liste_rep(ROOT));

?>
lundi 30 août 2010 à 10:57:47 | Re : Besoin d'aide pour un script.

Raul duke

il faut a mon avis passer le tableau en tant que paramètre par référence

Code PHP :
function liste_rep($src_dir, &$tabl_dir) {
....
lundi 30 août 2010 à 11:04:44 | Re : Besoin d'aide pour un script.

TychoBrahe

Oops, au fait dans le code que j'ai posté on peu carrément virer $tabl_dir des paramètres, il est tellement useless que je ne n'y avais pas fait attention. J'en profite pour dénoncer cette technique de passer le paramètre par référence : négliger le retour normal d'une fonction au profit d'un effet de bord est une mauvaise pratique qui conduit bien souvent à de jolis bugs.
lundi 30 août 2010 à 11:09:37 | Re : Besoin d'aide pour un script.

Raul duke

Code PHP :
<html><head><title></title>
<?php 
//Liste les dossiers de maniere récursive
function liste_rep($src_dir, &$tabl_dir) 
{
    $dir = opendir($src_dir);
    while($nom = readdir($dir)) 
	{
		if ($nom != "." && $nom != "..") 
		{
		    $chemin=$src_dir ."\\". $nom;
		    if (is_dir($chemin)) 
			{	
		        echo $chemin."<br>";
				array_push($tabl_dir,$chemin);
				liste_rep($chemin,$tabl_dir);
		    }
		}
    }
    closedir($dir);
}
?>

</head>
<body>
<?php
	define("ROOT", "D:\wamp");
	$List_Dir= array();
	liste_rep(ROOT, $List_Dir); 

	echo "<br><h2>TABLEAU</h2></br>";
	foreach ($List_Dir as $ent)
	{
		echo $ent, " </br>";
	}
?>
</body></html>
lundi 30 août 2010 à 12:17:41 | Re : Besoin d'aide pour un script.

47

Bonjour,

où en utilisant la SPL:

Code PHP :
<?php
$sPath = 'c:/temp/';

$oIter = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator(
        $sPath,
	RecursiveDirectoryIterator::KEY_AS_FILENAME
    ),
    RecursiveIteratorIterator::SELF_FIRST
);

$aRes = array();

foreach($oIter as $oData) {
    if ($oData->isDir()) {
        $aRes[] = $oData;
    }
}


bonne journée
lundi 30 août 2010 à 16:05:48 | Re : Besoin d'aide pour un script.

Yodelei

@TychoBrahe
Merci, en modifiant un tout petit peu ton code, je suis arrivé à mes fins. Par contre je vais devoir travailler mon PHP encore et encore, j'ai pas compris tout de suite ton code. l'abscnce { m'a un peu déstabilisé. Au début j'ai cru à une simplification pour par tout écrire sur le forum, mais quand j'en ai rajouté... ça marchait plus :)

@Tous les autres
Merci beaucoup d'avoir pris le temps de répondre. Juste une question @47 : SPL:, qu'est-ce que c'est???

Dsl, débutant inside :)
lundi 30 août 2010 à 17:10:46 | Re : Besoin d'aide pour un script.

TychoBrahe

l'abscnce { m'a un peu déstabilisé


Les accolades ne servent qu'à délimiter un bloc d'instructions, dans la cas où il n'y a qu'une seule instruction il n'est donc pas nécessaire de les mettre. Exemple des deux versions équivalentes :
Code PHP :
<?php
if (true)
   echo 'toto';
if (true)
   {
      echo 'toto';
   }
?>


SPL:, qu'est-ce que c'est???


Tout est expliqué dans la doc PHP ;)


Cette discussion est classée dans : web, ajax, developpement, dir, dossiertest


Répondre à ce message

Sujets en rapport avec ce message

developpement web [ par salarsoy ] Bonjour,Je cherche un code source our faire fonctionner une webcam sur un site internet. Quelqu'un peut m'aider? curl et ajax [ par tious82 ] Bonjour a tous, J'essai de récuperer le contenu d'un résultat d'une page distante( une base de connaissance - application web tierce stockée sur un s developpement web [ par maclar ] Je cherche quelqu'un qui pourrai m'aider par correspondance pour mon mémoire sur l'élaboration d'un site communale.Merci d'avance Debutant en developpement web [ par VisualBoy ] Bonjour, Tout d'abord, desole pour les accent: Je travaille avec un clavier qwerty. Je me suis decide a poster parce que j'aimerai avoir quelques cons Cherche Team pour Project [ par kanye1982 ] Youssef Bonjour tout le monde voila je ne vais pas vous faire un message de 100 lignes mais juste vous résumé ça en 20 ligne si possible... Je suis AJAX [ par xbladarium ] Bonjour, Voila j'aimerais recuperer la valeur de mon select et grace a cette valeur pouvoir afficher des données qui sont dans la BDD en fonction de developpement d'une session [ par spturro ] bonjour je suis a la recherche d'aide pour finir mon site je cherche a comprendre comment creer une session mais avec tous les codes je n'y comprent r Intégration web compatibilité des navigateurs [ par arillustor ] Bonjour, Je vous informe l'un de mes problèmes que je n'arrive pas à régler depuis un bon moment c'est pour cela que j'essaye de faire appel à vous. Impression de bordereau d'expédition du web [ par shakalab ] Bonjour, je bosse en ce moment sur un projet web et on souhaite pouvoir imprimer des bordereaux avec des codes barres d'un site web. Quelqu'un aurai introduire une page de navigation dans une page web [ par emmanuelf49 ] j'ai créer un site très basique il y a maitenant 2ans et je cherche à integrer dans une page web de ce site un forum que j'ai créé sur phpBB.J'ai deux


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,170 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales