Discussion:
fonction recursive
(trop ancien pour répondre)
Jean Pierre Daviau
2007-02-16 07:19:09 UTC
Permalink
Bonjour à tous,

J'essaie de créer une fonction récursive qui enregistrera le
chemin d'un fichier. Vous avez des chemins de solutions?

<?php
class incl_class {
var $iteration = 0;
var $safepath;
var $member;
var $path;
var $basepath;
var $classe;

function incl_class($input){
$this->classe = $input;
$this->path = str_replace('\\', '/', __FILE__);
$fichier = substr($this->path, 0, strrpos($this->path, "/"));
$this->basepath = $fichier . "/";
$this->safepath = $this->basepath;
}

function OpenAllDir($PathToRepertoire = "./", $aRetourner =
array(), $level = 1)
{
$cpt = 0; // On ouvre le dossier
$dossier = opendir($PathToRepertoire); // On parcourt le
dossier
print "$PathToRepertoire\n";

//$this->basepath = $this->safepath;

while($dir = readdir($dossier))
{

if(is_dir($dir) && $dir != '.' && $dir != '..')
{
if($level > $this->iteration)
{
$this->basepath = $this->basepath . $dir . '/';
$this->iteration = $level;
}
$cpt++;
$aRetourner[$cpt] = array($dir, $this->OpenAllDir(
$PathToRepertoire . $dir . '/', $aRetourner[$cpt]),
$level++);
}

if ($dir === $this->classe) {
$this->basepath = $this->basepath;
print "Le fichier $dir existe\n";
break;
}
}

closedir($dossier);

return $this->basepath;
}
}//fin de class

$nw = new incl_class("haha.php");
echo $nw->OpenAllDir();


?>

dossier un
a.php
b.php
dossier deux
c.php
d.php
+ dossier soussol
e.php
haha.php

Jean Pierre Daviau
--
windows Xp
asus p4 s533/333/133
Intel(R) Celeron (R) CPU 2.00 GHz
Processor Radeon7000 0x5159 agp
Jean Pierre Daviau
2007-02-16 15:07:15 UTC
Permalink
Re bonjour,
construct: C:/PHP/commandLine/
construct: C:/PHP/commandLine/PHP on the Command Line - Part
1_fichiers/
Warning: readdir(): supplied argument is not a valid Directory
resource in C:\PHP\commandLine\import_class.php on line 50
Warning: closedir(): supplied argument is not a valid Directory
resource in C:\PHP\commandLine\import_class.php on line 71
construct: C:/ PHP / commandLine / PHP on the Command Line -
Part 1_fichiers / PHP on the Command Line - Part 2_fichiers/
Warning: readdir(): supplied argument is not a valid Directory
resource in C:\PHP\commandLine\import_class.php on line 50
Warning: closedir(): supplied argument is not a valid Directory
resource in C:\PHP\commandLine\import_class.php on line 71PHP on
the Command Line - Part 2_fichiersPHpLine.cmd
Ici je comprends puisque:
C:/PHP/commandLine
+PHP on the Command Line - Part
1_fichiers/
+PHP on the Command Line - Part
2_fichiers/


==================== classe import_class
============================
<?php
// php -check-f import_class.php
/*

class import_class {

var $safepath;
var $basepath;
var $classe;

function import_class($input){
if(strstr($input, ".php")){
$this->classe = $input;
$this->path = str_replace('\\', '/', __FILE__);
$fichier = substr($this->path, 0, strrpos($this->path, "/"));
$this->basepath = $fichier . "/";
$this->safepath = $this->basepath;
print "construct: $this->safepath\n";
}else{
$this->basepath = $input;
print "construct: $input\n";
}
}

function OpenAllDir()
{
$cpt = 0;

// On ouvre le dossier
$dossier = opendir($this->safepath);

// On parcourt le dossier
while($dir = readdir($dossier))
{

if(is_dir($dir) && $dir != '.' && $dir != '..')
{
$PathToRepertoire = str_replace($PathToRepertoire, '.', '' );
$this->safepath = $this->safepath . $PathToRepertoire . $dir .
"/";
//print "OpenAllDir: $this->safepath\n";

$instance = new import_class ($this->safepath);
$instance->OpenAllDir();
}

if ($dir === $this->classe) {
$this->basepath = $this->basepath;
print "Le fichier $dir existe\n";
break;
}
print "$dir\n";
}

closedir($dossier);
}

}//fin de class

$nw = new import_class("haha.php");
$nw->OpenAllDir();
Jean Pierre Daviau
2007-02-18 18:22:39 UTC
Permalink
=======
class import_class {
var $classe;
var $basepath;
var $safepath;

var $basedepth = 3;
var $newdepth = 3;

//construct: C:/PHP/commandLine/Part_2 3
function import_class($input){
if(strstr($input, ".php")){
$this->classe = $input;
$path = str_replace('\\', '/', getcwd());
$this->basepath = $path;
$this->safepath = $this->basepath;
print "construct: $this->safepath \n";
}
}

function OpenAllDir($input)
{
$this->newdepth++;
$this->safepath = $this->basepath . $input;

foreach (count_chars($this->safepath, 1) as $i => $val) {
if(chr($i) === '/') $this->newdepth = $val;
}

print "OpenAllDir: $this->safepath: $this->newdepth\n";

// On ouvre le dossier
$dossier = opendir($this->safepath);

// On parcourt le dossier
while($dir = readdir($dossier))
{
// 1 dossier 2 dossiers au-dessus
if(is_dir($dir) && $dir != '.' && $dir != '..')
{
echo("\$dir;
==$dir\n==$this->basepath\n==$this->safepath\n$this->newdepth\n\n");
$this->OpenAllDir("/" . $dir);
}

if ($dir == $this->classe) {
print "\n" . $this->safepath . "/" . $dir . "\n";
return;
}
}

closedir($dossier);
}

}//fin de classe

$nw = new import_class("haha.php");
echo $nw->OpenAllDir();


========


if(is_dir($dir) && $dir != '.' && $dir != '..')
{
echo("\$dir;
==$dir\n==$this->basepath\n==$this->safepath\n$this->newdepth\n\n");
$this->OpenAllDir("/" . $dir);
}
| C:/PHP/commandLine/
| +Part_1
| +node1
Elle retourne les dossiers commandLine et Part_1 mais pas
node1.

Pourquoi cette fonction n'est-elle pas récursive jusqu'au 3ème
niveau?

Jean Pierre Daviau
2007-02-16 15:07:15 UTC
Permalink
Post by Jean Pierre Daviau
}
$cpt++;
$aRetourner[$cpt] = array($dir, $this->OpenAllDir(
$PathToRepertoire . $dir . '/', $aRetourner[$cpt]),
$level++);
}
Je crois que j'ai compris. Il faut instancier une nouvelle classe
à chaque dossier.
Christophe Meresse
2007-02-16 15:07:15 UTC
Permalink
Post by Jean Pierre Daviau
J'essaie de créer une fonction récursive qui enregistrera le
chemin d'un fichier.
Ca ne veut pas dire grand chose ??
Post by Jean Pierre Daviau
Vous avez des chemins de solutions?
Et qu'est ce qui ne marche pas exactement ? Tu veux qu'on fasse du
reverse engineering sur ton code assez peu lisible ?

Désolé d'être un peu brusque mais je pense qu'il faudrait que tu sois
plus explicites...

Christophe
Continuer la lecture sur narkive:
Loading...