Fonction ''couper coller" dossiers [Résolu]

Signaler
Messages postés
105
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
14 février 2013
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
,

Besoin d'un pro php

bonjour,
j'ai une fonction qui ne fonctionne pas et je voi pas pourquoi elle
plante ou bien eme un autre moyen d'arrivé a faire ce que celle ci
devrai faire!

je vous explique ce qu'elle est sensé faire :

deplacer le dossier A vers le dossier B

-creer un dossier C avec le meme nom que le dossier A dans le dossier B

-parcourir le dossier A et

----------si il y a un fichier le copiedans le dossier C puis le supprimer du dossier A

----------si c'est un dossier : faire la meme chose pour ce dossier (pour avoir tout le contenu du dossier etc.

voila mon code :Code : <table cellpadding="0" cellspacing="0" width="90%">----,

function dep_dir($source,$destination){

if (!is_dir($destination)){

mkdir($destination,0777);

}

$dossier=opendir($source);
while (false !$fichier readdir($dossier)) {

if (is_dir($source.\"/\".$fichier)){

dep_dir($source.\"/\".$fichier, $destination.\"/\".$fichier);

}

else{

copy ($source.\"/\".$fichier, $destination.\"/\".$fichier);

unlink($source.\"/\".$fichier);

}

}

@closedir($dossier);

rmdir($source);

}
</td>




si quelq'un peu m'aider ca serai cool


merci !



</td></tr></tbody>
</table>

9 réponses

Messages postés
105
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
14 février 2013
2
Oui mais cela pose probleme pour les sous dossiers qui n'aurons plus un bon chemin dans ce cas non ?. :)

enfin bref merci beaucoup en faite je vien de comprendre ou etait mon
erreur grace a ton example.Je vous remet le code ici corrigé avec les
endroit qu'il manqué en gras .. comme ca si ca interesse quelqu'un :)



function deplace_dir($source,$destination){

if (!is_dir($destination)){

mkdir($destination,0777);

}

$dossier= opendir($source);



while (false != = ($fichier = readdir($dossier))) { // attention a la version de php pour le "!= ="

$l = array('.', '..');

if (!in_array( $fichier, $l)){


if
(is_dir($source."/".$fichier)){



deplace_dir($source."/".$fichier, $destination."/".$fichier);

}

else{


copy
($source."/".$fichier, $destination."/".$fichier);



unlink($source."/".$fichier);

}

}

}

@closedir($dossier);

rmdir($source);

}



voila :)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,



voici un extrait de mon explorateur php, pour deplacer des dossiers ou des repertoires :



protected function deplacer_ ($destination, $fichiers) { // methode pour deplacer fichier ou repertoire

foreach ($fichiers as $fichier) {

$destTemp =$destination. '/'.basename ($fichier);

if (!file_exists ($destTemp)) {

$mod = $this -> checkMod ($destination);

$modTmp = $this -> checkMod ($fichier);

rename ($fichier, $destTemp);

if ($mod !== false)


$this -> modBack ($mod,
$destination);

}

}

}



la methode checkMod est la pour verifier le mod du fichier/repertoire, et le changer si besoin est.

modBack remet le mod tel qu'il etait au depart.



Tu peux t'en inspirer.



Sinon va voir ma source directement et analyse :

http://phpcs.com/code.aspx?ID=31562
Messages postés
105
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
14 février 2013
2
oui mais la il y a pas tout les sous dossier et sous-sous dossier.. la est mon probleme...

en tout cas merci j'examine ca deja
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Si si, mon code deplace tout, crois moi. Tu peux tester l'explorateur si tu veux, tu verras.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
En fait ce que tu n'as pas realise, je pense, c'est que renommer, en php, est similaire a un deplacement.
Messages postés
105
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
14 février 2013
2
je ne savais pas cela !

en fait la version de php que j'ai est la 4 donc la POO ca ne marchera pas ! et puis je comprend pas vraiment ^^

je vais essayer de traduire tout ca sans les class donc.. snif
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Oui le code est adaptable sans probleme en php4.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Mais le principe est simple...



repA

repB

copier repA dans repB

rename (repB, repA.'/'.repB);



en gros.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Les sous-dossiers se fichent pas mal de ou ils sont, lol. Au lieu
d'etre sour repB, ils seront sour repA/repB pi basta. Ca ne change rien.