Aller au contenu

Déplacer des dossiers avec php


Sujets conseillés

Posté (modifié)

Bonjour,

J'ai un scirpt qui permet de créer des dossiers par ftp avec un chmod 0777 sur un server dédié OVH.

Avant de créer ce dossier je leur indique une catégorie.

Ce dossier va donc soit dans le dossier catégorie 1 ou 2 ou 3.

Je voudrais avoir la possibilité de déplacer par éxemple un dossier envoyé dans un dossier catégorie 1 vers un dossier catégorie 2 si je me trompe de catégorie.

Est-ce qu'il faut utiliser la fonction ftp_chdir ou system(mv $dossier $dossierDestination) ou exec(mv -R $dossier $dossierDestination ")

?

Merci :)

Modifié par gto55
Posté

Bonjour,

La fonction ftp_chdir permet de changer de répertoire courant sur le FTP, pas de déplacer des fichiers ou des dossiers.

La fonction system(), exec(), shell_exec(), etc. sont possible comme tu te trouves sur un serveur dédié... elle a l'inconvénient de nuire à la portabilité de ton application, sous Windows par exemple ton script ne fonctionnera pas, la commande "mv" n'existe pas... De plus si une fois tu viens à activer le safe_mode ce sont des fonctions qui ne seront plus activées ou limitées.

J'utiliserais plutôt la fonction rename, elle n'a pas ce problème de portabilité car elle fonctionne directement sur le système de fichiers (sans faire appel à un "programme" externe). Regarde parmi les commentaires sur cette page du manuel PHP, il y a des fonctions toutes faites et très intéressantes.

Bonne continuation.

Posté

Merci :D

Je vais tester.

Est-ce que ça marchera aussi avec tt le contenu du dossier à déplacer?

S'il y a des vidéos ou des images ou des archives?

Merci :)

Posté

En fait après relecture des commentaires la fonction rename à des problèmes de portabilité également, mais pas du même ordre (c'est l'implémentation de la fonction qui pose problème...les contraintes des systèmes de fichiers étant différentes)...

Il va donc falloir faire le déplacement toi-même... c'est à dire : copie vers le nouvel emplacement et suppression des fichiers originaux ayant été copiés correctement.

La copie devant être récursive (sous-répertoire, fichiers, ...) tu peux utiliser cette fonction trouvée dans les commentaires de la fonction copy.

Pour la suppression tu as la fonction unlink et rmdir ... à toi de les coupler à la fonction copydirr (celle des commentaires de copy) afin qu'une fois qu'un fichier a été copié il soit supprimé. Tu peux éventuellement faire une fonction qui supprime un répertoire récursivement, mais c'est préférable de supprimer les fichiers un à un, histoire de ne pas avoir de surprise lorsqu'il y a un problème de permission ou d'accès à un fichier...

Je ne vois pas trop d'autre solution qui soit portable.

P.S: Dans un environement Linux, rename déplace les fichiers et tu reçois des avertissements lorsque des fichiers existent déjà etc.

Posté (modifié)

Je vais tester avec rename, si ça ne marche pas je testerai ta 2ème méthode.

Je ne trouve pas la fonction copydir dans le chm de php.net.

Est-ce que tu aurais un exemple?

Merci :)

Modifié par gto55
Posté

Il n'existe pas de fonction copydir ... Le fonction "copydirr" (r pour récursive) c'est la fonction (créée par une personne, pas native à PHP) qui se trouve dans les commentaires sur la page du manuel PHP de la fonction copy à cette adresse : http://ch2.php.net/manual/fr/function.copy.php#55130

Normal que tu ne trouves pas cela dans le CHM du manuel PHP, les commentaires ne se trouvent que sur le manuel online.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...