Accueil > > > COPIER UN RÉPERTOIRE ET TOUT CE QU'IL CONTIENT
COPIER UN RÉPERTOIRE ET TOUT CE QU'IL CONTIENT
Information sur la source
Description
Comme je vois que c'est la mode des fonctions sur les fichiers ;-) avec 2 jolies fonctions pour créer des dossiers, je me lance aussi ! Voici une fonction permettant de copier un répertoire dans un autre, ainsi que tout ce qu'il contient : fichiers, sous-répertoires. Renvoie true en cas de succès, false sinon.
Source
- <?php
-
- 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 ('test', 'test2'); // 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
- ?>
<?php
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 ('test', 'test2'); // 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
?>
Historique
- 31 août 2005 17:10:33 :
- On peut appeler la fonction avec 2 chaines dorénavant.
Correction de warnings.
- 10 novembre 2005 10:03:01 :
- Correction très rapide d'un bug. J'optimiserai plus tard, là je n'avais pas le temps. Du coup, on se retrouver avec 2 fonctions au lieu d'une...il y a plus simple :-) Mais ce sera pour un peu plus tard (bah ouais, y en a qui travaillent!!)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Problème avec les fonctions mkdir et copy [ par i_robot ]
Salut, j'ai un probleme avec les fonction mkdir et copy. je veut copier un copier un dossier et le rennomer selon le nom que le visiteur aura choisi.
Sauvegarde de fichiers [ par magicsmacks ]
Bonjour,Je possède 2 serveurs, et afin de sauvegarder les données de l'un des deux serveurs sur le second, j'aimerais créer un script pour copier des
comparer [ par jnbdzjnbdz ]
Bonjour, je me demandais comment comparer le nom de fichiers image (jpg|jpeg|gif|png) avec le nom de d'autres fichiers image dans un autre dossier app
Gestion de fichiers [ par shadow1779 ]
Bonjour,j'aimerai apprendre le plus possible sur la gestion de fichiers en php, c'est a dire:-suppression d'un fichier-création/suppression d'un dossi
Lecture d'un nom de fichier...2 [ par magicsmacks ]
Bonjour, J'avais demandais il y a qq jours ceci : " Bonjour, Je possède un dossier sur mon serveur dans lequel
impression de fichiers [ par putch ]
bonjour à tous !voila mon soucij'ai un repertoire pdf/ lequel se trouve un certains nombre de fichiers pdf :)je souhaiterai un lien/bouton pour l
Tout le monde peut accéder à mes fichiers, comment bloquer cela? [ par hasen ]
Bonjour, bonjour. Je ne suis pas sur que cette question soit completement en rapport avec PHP, mais il me faut a tout rpix une reponse et je ne savais
Upload multiple de fichiers [ par Sly_83 ]
Bonjour,je cherche un script qui permet d'uploader plusieurs fichiers mais sans les électionner un par un, par exemple en pointant vers un dossier et
les liens vers les fichiers [ par abdellah1505 ]
Bonjour,j'ai trouvé ce script qui liste les 3 derniers fichiers ajouté dans un dossier mais il ne donne pas des liens vers les fichiers juste leurs no
Créer un tableau html en php... avec une subtilité ! [ par vxr888 ]
Bonsoir à tous,J'ai un soucis et j'espère trouver une réponse chez vous.Je vous expose le problème :J'ai écrit un code qui parcourt un dossier (avec r
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Forum
RE : SONDAGE..RE : SONDAGE.. par phpAnonyme
Cliquez pour lire la suite par phpAnonyme RE : SONDAGE..RE : SONDAGE.. par TychoBrahe
Cliquez pour lire la suite par TychoBrahe
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|