script php permettant de faire un scan d'un répertoire

jbt
Invité n'ayant pas de compte PHPfrance

24 août 2009, 11:47

Bonjour,

Je souhaite faire un script php permettant de faire un scan d'un répertoire, avec tous les sous répertoire, avec un rendu final dans un fichier excel.
Le but est de garder une liste de mode opératoire à jour.

Cela est il accessible pour un novice?

Merci.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

24 août 2009, 12:12

En recherchant sur google, oui.
Ce que tu cherches à faire en très souvent demandé, et tu devrais trouver de nombreuses sources.

http://www.google.com/search?q=site%3Aw ... A9pertoire
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 2937 Messages

24 août 2009, 13:38

À défaut de chercher sur Google, tu peux commencer par explorer les arcanes de la fonction scandir (). ;)

Eléphant du PHP | 199 Messages

24 août 2009, 18:48

Je me souviens d'avoir fait ca pour mon stage.
En fait tu dois faire un scandir et tester avec la fonction dir() si les éléments de ton répertoire sont des dossiers
ou des fichiers. Si c'est des dossiers tu rappels la fonction. Ca donne une fonction récursive (merci de la précision
j'y étais presque :o ).
Modifié en dernier par Superpilou le 24 août 2009, 22:38, modifié 1 fois.

Mammouth du PHP | 991 Messages

24 août 2009, 19:12

Je me souviens d'avoir fait ca pour mon stage.
En fait tu dois faire un scandir et tester avec la fonction dir() si les éléments de ton répertoire sont des dossiers
ou des fichiers. Si c'est des dossiers tu rappels la fonction. Ca donne une fonction incursive (désolé si c'est pas le
nom la fatigue tout ca :D ).
Le nom est récursive ;)
function recursifDir($url)
{
		$return = array();
	if ($handle = opendir($url)) {
		while (false !== ($file = readdir($handle))) {
			if ($file != "." && $file != "..")  
			{
				if (is_file($url.'/'.$file))
				{
					$return[] = $file
				}
				
				if (is_dir($url.'/'.$file))
				{
					$return[] = recursifDir($url.'/'.$file);
				}
			}
			
		}
		closedir($handle);
	}

	return $return;
}
Voici un exemple ;)
Bye Hawk
DevOps, Symfony4, Hoa

ViPHP
AB
ViPHP | 5818 Messages

24 août 2009, 19:34

Je me souviens d'avoir fait ca pour mon stage.
...Si c'est des dossiers tu rappels la fonction. Ca donne une fonction incursive (désolé si c'est pas le
nom la fatigue tout ca :D ).
C'est pas le nom mais ça rime
incursif :
1. Qui fait irruption, qui envahit.

récursif :
1. Qui se définit en s’utilisant soi-même, directement ou indirectement.
Puisque c'est une fonction qui s'appelle elle-même quand on détecte un dossier (comme tu le dis justement) on choisira le terme de fonction récursive :)

Un exemple qui n'utilise pas scandir mais l'ancienne méthode avec opendir etc. (toujours fonctionnelle cependant) pour avoir un tableau facilement exploitable :
class List_dossier

{

        private $tab_list = array();
        private $message = null;


        public function __construct ($dos = null)
        {
        if (isset($dos) && is_dir($dos)) $this->Lire_Dossier($dos); else $this->message = 'Ce dossier n\'existe pas';  
        }


        private function Lire_Dossier($dir_nom)
        {
                        $dir = opendir($dir_nom);
                       
                         while($element = readdir($dir))
                                {
                                        if($element != '.' && $element != '..')                
                                                {
                                                         if (!is_dir($dir_nom.'/'.$element))
                                                                {
                                                                 $this->tab_list[$dir_nom][] = $element;
                                                                 }
                                                         else
                                                                 {
                                                                 $this->Lire_Dossier($dir_nom.'/'.$element);
                                                                 }
                                                }
                                }
                           
                        closedir($dir);
               
        }

       
        public function Affiche ()
        {
        if (!isset($this->message)) return $this->tab_list; else return $this->message;
        }
}


// remplace 'Mon_dossier' par un de tes dossiers
$dossier = new List_dossier('Mon_dossier');

// Contrôle du contenu du tableau généré avec $dossier->Affiche()
echo '<pre>';
print_r($dossier->Affiche());
echo '</pre>';
EDIT : comme j'ai tardé à répondre je n'avais pas vu la réponse de thehawk mais je laisse mon post car cette petite classe possède l'avantage de lister le nom des sous dossiers.

Invité
Invité n'ayant pas de compte PHPfrance

26 août 2009, 10:56

Merci beaucoup pour vos réponses, j'ai quasi réussi, j'ai juste du mal à sortir le résultat dans un fichier excel.....

ViPHP
ViPHP | 4039 Messages

26 août 2009, 11:40

Soit tu t'y essayes avec les objets COM ( http://stephaneey.developpez.com/tutoriel/php/phpexcel/ ),
soit en exportant un fichier CSV (http://fr3.php.net/manual/fr/function.fputcsv.php , http://www.ndfr.net/forums/archive/inde ... -3416.html )

C'est quand même bien fait google.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.