[PHP] Copier le contenu d'un dossier
SoNNy
-
giheller Messages postés 1882 Date d'inscription Statut Membre Dernière intervention -
giheller Messages postés 1882 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 ?>
A voir également:
- [PHP] Copier le contenu d'un dossier
- Dossier appdata - Guide
- Impossible de supprimer un dossier - Guide
- Mettre un mot de passe sur un dossier - Guide
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
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é)
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"
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.
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.
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)
verifier qu'on est bien dans le bon dossier (qu'il est ouvert)
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.
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 ;)
Mais je n'arrive pas à modifier le script pour éviter la copie.
Je vais continuer à chercher ;)