Fonction récursive

Signaler
Messages postés
19
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
13 avril 2004
-
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
-
Salut, j'ai trouvé un script qui répond à mes exigences seulement le problème c'est qu'il est illisible et je ne sais pas ou il faut mettre le répertoire d'origine et celui de destination :( merci de m'aider ;o)

<?php
/*
* Fonction récursive pour copier une arborescence
* de repertoires et fichiers équivalent d'un cp -r
* Renvoie 1 si tout c'est bien passé, 0 dans le
* cas contraire.
*
* Version 1.0 - Licence GPL -
*
* Merci de ma mailer les correctifs et détection
* de bugs éventuels
* Olivier : pnine@free.fr
*
* Pour l'utiliser appeler la fonction cp_recursif avec
* le path en absolue du repertoire source et du repertoire
* de destination.
* Attention : aucun test n'a été fait avec un path en relatif...
*/

function cp_recursif($source, $destination){

// Test sur le passage des données
if(empty($source) OR empty($destination))
return(0);

// Test sur l'absence d'un repertoire identique à celui à copier
if(is_dir($destination))
return(0);

// Test sur l'existence du repertoire à copier
if(!@chdir($source))
return(0);

if(!@mkdir($destination, 0777))
return(0);

// Copie tous les fichiers du repertoire racine
$dir = opendir(".");

while($fichier_rep = readdir($dir)){
if($fichier_rep != "." && $fichier_rep != ".."){
if (!is_dir($fichier_rep)){
if (!@copy($fichier_rep, $destination."/".$fichier_rep))
return(0);
}
}
}
closedir($dir);

$test = recursif_cp($source, $destination, "");

if ($test == 0)
return(0);

else
return(1);

}

function recursif_cp($source, $destination, $path_courant){

$dir = opendir(".");

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

if($fichier_rep != "." && $fichier_rep != ".."){

// Test si un repertoire n'est pas encore copié
if (is_dir($fichier_rep) && !is_dir($destination.$path_courant."/".$fichier_rep)){

closedir($dir);

if(!@mkdir($destination.$path_courant."/".$fichier_rep, 0777))
return(0);

$path_courant .= "/".$fichier_rep;

if (!@chdir($source.$path_courant))
return(0);

$dir = opendir(".");

while($fichier_rep = readdir($dir)){
if($fichier_rep != "." && $fichier_rep != ".."){
if (!is_dir($fichier_rep)){
if (!@copy($fichier_rep, $destination.$path_courant."/".$fichier_rep))
return(0);
}
}
}

closedir($dir);

return(recursif_cp($source, $destination, $path_courant));

}

}

}

closedir($dir);

if(empty($path_courant))
return(1);

if (!@chdir(".."))
return(0);

$path_courant = dirname($path_courant);

return(recursif_cp($source, $destination, $path_courant));
}
?>

7 réponses

Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
salut!

tu dis:
"je ne sais pas ou il faut mettre le répertoire d'origine et celui de destination"

à priori c toi qui doit choisir ça, pas le programme!!!
Messages postés
19
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
13 avril 2004

vi c'est moi qui choisi mais justement sais pas ou il faut mettre dans le script :(
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
"
*
* Pour l'utiliser appeler la fonction cp_recursif avec
* le path en absolue du repertoire source et du repertoire
* de destination.
"

donc tu fais un cp_recursif(source, destination);
Messages postés
19
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
13 avril 2004

cp_recursif(home/www/user88/upload, /upload2);

ça ne marche pas chez moi :\
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
moi je mettrai des guillements autours des chemin de repertoires..

ton dossier /upload2 existe deja?
Messages postés
19
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
13 avril 2004

oui il existe déjà ;-)
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1
ben il faut pas ;)

if(is_dir($destination))
return(0);