[PHP] Copier le contenu d'un dossier
SoNNy
-
giheller Messages postés 1892 Date d'inscription Statut Membre Dernière intervention -
giheller Messages postés 1892 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Ci dessous un code. Il marche trés bien mais je ne souhaite pas avoir le dossier racine.
La mon problème est que je souhaite copier "uniquement" le contenu du dossier et pas le dossier lui même.
Pouvez vous me dire qu'elle est le problème avec ce code?
Ci dessous un code. Il marche trés bien mais je ne souhaite pas avoir le dossier racine.
La mon problème est que je souhaite copier "uniquement" le contenu du dossier et pas le dossier lui même.
Pouvez vous me dire qu'elle est le problème avec ce code?
function create_tab ($dir) { // fonction creant le tableau contenant les repertoires et fichiers
$dir = rtrim ($dir, '/'); // on vire un eventuel slash mis par l'utilisateur de la fonction a droite du repertoire
if (is_dir ($dir)) // si c'est un repertoire
$dh = opendir ($dir); // on l'ouvre
else {
echo $dir, ' n\'est pas un repertoire valide'; // sinon on sort! Appel de fonction non valide
exit;
}
while (($file = readdir ($dh)) !== false ) { //boucle pour parcourir le repertoire
if ($file !== '.' && $file !== '..') { // no comment
$path =$dir.'/'.$file; // construction d'un joli chemin...
if (is_dir ($path)) { //si on tombe sur un sous-repertoire
$tableau[$dir]['dir'][] = $path;
$tabTmp = create_tab ($path); // appel recursif pour lire a l'interieur de ce sous-repertoire
if (is_array ($tabTmp) && is_array ($tableau))
$tableau = array_merge ($tableau, $tabTmp);
}
else
$tableau[$dir]['file'][] = $path;
}
}
closedir ($dh); // on ferme le repertoire courant
if (isset ($tableau)) {
return $tableau;
}
}
function copier_rep ($destination, $reps, $tableau_dir = array ()) { // fonction pour copier repertoire : on cree un repertoire de meme nom, puis on va chercher les fichiers, et on les copie. Si il y a des sous repertoires, appel recursif.
if (empty ($tableau_dir)) {
echo 'Entrée';
$tableau_dir = create_tab ($reps);
}
if (!is_array ($reps)) {
$reps = array ($reps);
}
foreach ($reps as $rep) {
if (!is_dir ($destination.'/'.basename ($rep))) {
mkdir ($destination.'/'.basename ($rep));
if (!empty ($tableau_dir[$rep]['file']) && isset($tableau_dir[$rep]['file']) && is_array ($tableau_dir[$rep]['file'])) {
foreach ($tableau_dir[$rep]['file'] as $fichier) {
copy ($fichier, $destination.'/'.basename ($rep).'/'.basename ($fichier));
}
}
if (!empty ($tableau_dir[$rep]['dir']) && isset ($tableau_dir[$rep]['dir']) && is_array ($tableau_dir[$rep]['dir'])) {
copier_rep ($destination.'/'.basename ($rep), $tableau_dir[$rep]['dir'], $tableau_dir);
}
}
}
}
copier_rep ("site/destination", "site/contenu_a_copier"); // 1er paramètre : le répertoire de destination sous forme d'une chaine
// 2d paramètre : le répertoire à copier sous forme d'une chaine ou d'un tableau
?>Configuration: Windows 7 Firefox 3.5.7
11 réponses
-
bonsoir,
function create_tab ($dir)
cette fonction reçoit en paramètre le contenu du paramètre passé, et elle l'utilise en tant que variable appelée $dir.
il faut donc appeler cette fonction avec le bon paramètre. (soit le dossier désiré)
-
Je suis pas sur de comprendre...
Justement il me semble que j'ai mis le bon chemin...
Ce que je souhaite c'est copier uniquement les fichiers et dossiers se trouvant dans le répertoire:
"site/dossier" -
si $dir contient le bon dossier pourquoi, si j'ai bien compris traite-t-il ce qu'il y a à la racine.
cela me semble étrange.
faites un echo du $dir au début de la fonction pour voir si c'est bien le bon dossier. -
non justement à la racine il y a plusieurs dossiers.
il prend le dossier complet et le copie... hors ce que je souhaite c'est simplement qu'il copie le contenu de ce dossier et pas lui avec. -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
alors il faut copier(son contenu) les fichiers (*.*) pas le dossier.
verifier qu'on est bien dans le bon dossier (qu'il est ouvert)
-
C'est exactement ça...
Tous les sous-dossiers et fichiers se trouvant dans celui-ci. mais pas lui. -
si tu regardes la deuxième fonction (copier rep) il semblerait qu'il crée un dossier du même nom avant de copier ce qu'il à mis dans le tableau dans la première fonction).
le script semble bien commenté et c'est ce qu'il dit.
function copier_rep ($destination, $reps, $tableau_dir = array ()) {
// fonction pour copier repertoire : on cree un repertoire de meme nom, puis on va chercher les fichiers, et on les copie. Si il y a des sous repertoires, appel recursif.
-
Oui je suis bien dans le bon dossier... Mais le dossier complet se colle. Je ne trouve pas l'erreur dans le script et cella depuis 6 heures d'affilés dessus Oo.
-
Oui j'ai vu ;)
Mais je n'arrive pas à modifier le script pour éviter la copie.
Je vais continuer à chercher ;) -
Je confirme je ne sais définitivement pas le modifier...
encore merci.. Je vais me faire une pause et de nouveau tt esssayer. -
bonsoir
regarde du côté de la variable appelée
$destination