Déplacer un fichier d'un dossier1 -> dossier2

Résolu/Fermé
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 - Modifié par necro27 le 21/06/2010 à 14:26
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 - 22 juin 2010 à 08:42
Bonjour tous le monde,

Contexte rapide :

Développement d'un site internet dynamique, où l'administrateur peut insérer des photos sur le site via un formulaire. (pas d'accès au code).

Je souhaiterais déplacer un fichier contenu dans le dossier 1 vers un dossier 2.
Comment faire cela ?

Je précise que le fichier est déjà envoyé via un champ input de type file, puis un move_uploaded_file vers le dossier 1.

En clair voici la démarche qui fonctionne :

-> Sélection du fichier via le site
<input type="file" name="foto" />

-> transfert du fichier vers le dossier 1
if(move_uploaded_file($_FILES['foto']['tmp_name'],"dossier1/".$_FILES['foto']['name']))

-> insertion du nom du fichier dans la bdd
$sql='insert into image values ("","dossier1/'.$_FILES['foto']['name'].'")'; 
mysql_query($sql) or die ('Erreur SQL'.$sql.'<br />'.mysql_error());


Démarche souhaitée :
-> sélection du fichier contenu dans le dossier 1 (par php et non par l'utilisateur)
-> déplacement du fichier vers le dossier 2

Je vous met ci-dessous le code que j'essaie d'adapter, en vain.

$dossier1=opendir('dossier1/');
while($fichier = readdir($dossier1))
{
$fichier1 = "$fichier";
$fichier2 = "$fichier.bak";
$dossier2=opendir('photos/');
if (copy($fichier1, $fichier2))
{
echo "déplacement réussi";
}
else
{
echo "déplacement du fichier $fichier1 raté";
}
}

Je pense ici que je fais du franglais, autrement dit que j'essaie trop de traduire en mode français l'interprétation php.

Voilà MA logique que j'ai, avec le code ci-dessus.

-> ouverture dossier 1
$dossier1=opendir('dossier1/');

-> lecture du dossier 1
$fichier = readdir($dossier1)

--> si le dossier 1 n'est pas vide :

->$fichier1 prend la valeur du fichier contenu dans le dossier1 (je pense)
$fichier1 = "$fichier";

-> $fichier2 prend la valeur du fichier à déplacer dans le dossier 2
$fichier2 = "$fichier.bak";


Pour ce qui est en gras, c'est ce que j'essaie d'adapter avec le code trouvé sur le site, http://www.manuelphp.com/php/function.copy.php car en effet pour utiliser la fonction php copy, il faut 2 paramètres. Mais j'ai plutôt l'impression que cette fonction copy ne copie pas vraiment d'un dossier vers un autre. C'est flou pour moi :/

Donc ensuite
->ouverture dossier2
$dossier2=opendir('dossier2/');

-> copie du fichier contenu dans le dossier 1 vers le dossier 2
copy($fichier1, $fichier2)


Mais le je suis dans une confusion totale.

Je recherche donc une personne pouvant m'aider, me faire comprendre, et éventuellement me signaler d'éventuelles erreurs.

Merci à vous, Necro27
A voir également:

3 réponses

Leviathan49 Messages postés 257 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 22 juillet 2011 70
21 juin 2010 à 14:33
Je dirais que le problème viens du fait qu'il ne doit pas trouver ton fichier1 pour le copier, essaye avec le chemin complet vers le fichier, du genre
copy("chemin vers dossier1/dossier1/$fichier1","chemin vers dossier2/dossier2/$fichier2")
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
Modifié par necro27 le 21/06/2010 à 14:53
Parfait !!

En fait j'avais testé déjà de mettre les "dossier1/" dans les variables par défault, mais cela ne fonctionnais pas car en effet j'avais mis un if au lieu du while..aller savoir pourquoi. :/

Mais merci beaucoup je ne pense pas que j'aurais réessayé sans ta réponse.

Ceci dit j'ai du apporter une autre modification je remet le morceau de code pour mieux illustrer
$dossier1=opendir('dossier1/');   
while($fichier = readdir($dossier1))   
{   
$fichier1 = "$fichier";   
$fichier2 = "$fichier.bak";   
$dossier2=opendir('photos/');   
if (copy($fichier1, $fichier2))   
{   
echo "déplacement réussi";   
}   
else   
{   
echo "déplacement du fichier $fichier1 raté";   
}   
} 


Code modifié (en gras ci-dessus):
$dossier1=opendir('dossier1/');   
while($fichier = readdir($dossier1))   
{   
$fichier1 = "$fichier";   
$dossier2=opendir('dossier2/');   
if (copy("dossier1/".$fichier1, "dossier2/".$fichier1))   
{   
echo "déplacement réussi";   
}   
else   
{   
echo "déplacement du fichier $fichier1 raté";   
}   
} 


Par contre :/ petit souci je cherche en parallèle, si jamais tu connais déjà la réponse..
Voici le message d'erreur :

Warning: copy(photos/Thumbs.db) [function.copy]: failed to open stream: Permission denied in ..\upload.php on line 16
déplacement du fichier Thumbs.db raté déplacement réussi

Ligne 16 -->
if (copy("dossier1/".$fichier1, "dossier2/".$fichier1))

La je bûche...
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
Modifié par necro27 le 21/06/2010 à 14:55
Bon voilà post complet, j'avais oublié pas mal de choses désolé, donc je l'ai modifié plusieurs fois, la c'est bon j'y retouche plus.

ça m'apprendra à ne pas faire prévisualiser :/

une autre modif :/ je précise pour l'erreur que le dossier photos est en fait le dossier 2..que j'ai renommé ainsi pour faire plus simple mais oublié de modifier partout
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
Modifié par necro27 le 21/06/2010 à 15:13
j'ai trouvé d'où vient l'erreur, en fait elle s'affiche lorsque le fichier a été déplacé.

J'ai l'impression en fait qu'une fois le fichier déplacé, la variable $fichier se vide et contient donc la valeur Thumbs.db.. Et en repassant dessus, par la boucle while, il n'arrive pas à copier ou je ne sais quoi.

Et la je ne vois pas quoi supprimer

Voici le code actuel

$dossier1=opendir('dossier1/');
while ($fichier = readdir($dossier1))
{
if ($fichier != "." && $fichier != "..")
{
echo $fichier;
if (copy("dossier1/".$fichier, "dossier2/".$fichier))
{
echo "déplacement réussi";
}
else
{
echo "déplacement du fichier $fichier raté";
}
}
}

fleur.jpgdéplacement réussiThumbs.db
Warning: copy(dossier2/Thumbs.db) [function.copy]: failed to open stream: Permission denied in ..\upload.php on line 15
déplacement du fichier Thumbs.db raté
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
21 juin 2010 à 15:17
c'est bon j'ai trouvé la solution, elle fonctionne parfaitement.

Il suffit d'ajouter dans la structure conditionnelle un élément.

Voici le code donc au final fonctionnel

$dossier1=opendir('dossier1/');
while ($fichier = readdir($dossier1))
{
if ($fichier != "." && $fichier != ".." && $fichier != "Thumbs.db")
{
if (copy("dossier1/".$fichier, "dossier2/".$fichier))
{
echo "déplacement réussi";
}
else
{
echo "déplacement du fichier $fichier raté";
}
}
}
0
heu c'est peut être bête mais si tu copies chaque fois le fichier dans les 2 dossiers, pourquoi tu répètes pas directement la fonction:
if(move_uploaded_file($_FILES['foto']['tmp_name'],"dossier1/".$_FILES['foto']['name'])) 
if(move_uploaded_file($_FILES['foto']['tmp_name'],"dossier2/".$_FILES['foto']['name'])) 


Sinon pour ta dernière erreur, il te dit "Permission denied", ce qui signifie que tu n'as pas les droits pour modifier, déplacer... ce fichier. Essaies de le faire en tant que root/administrateur, ou de modifier les droits du fichier (tu peux les voir avec ls - l si tu es sous Mac ou Linux)
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
21 juin 2010 à 16:05
Bonjour 6ril,

En fait voilà ce que je fais :
-> je copie le fichier dans le dossier 1.
-> je copie, du dossier 1, le fichier dans le dossier 2.
-> je supprime le fichier dans le dossier 1.

La façon dont je l'ai fait est ce que je pense être le plus rapide pour ce que j'exécute. je me comprend, ^^

En fait je dispose de 3 pages qui traitent les informations au fur et à mesure que je change de page

page 1 --> récupérer fichier (via formulaire)
page 2 --> le copier dans le dossier 1
page 3 --> copier le fichier dans le dossier 2 puis le supprimer dans le dossier 1

Sinon je ne suis que simple stagiaire, je n'ai pas les droits forcément nécessaire. Cependant, de mon coté je n'ai aucun souci pour copier coller, etc mes dossiers éventuels lorsque je le fait de façon manuelle.

Pourquoi par le code cela serait-il un souci ?

Merci sinon pour ton attention sur le sujet.

Necro27
0
Le problème de droit peut venir du fait de l'écriture.
Si tu crées un fichier, il est normale que tu puisses en faire ce que tu en veux. Par contre, si tu crées des fichiers, il est parfois possible que tu n'aies pas les droits.

Avec la commande "chmod 777 ton_fichier", tu donnes tous les droits à tous les utilisateurs. Ensuite, réessaye pour voir si le problème est résolu
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
Modifié par necro27 le 21/06/2010 à 17:43
Je ne te suis pas du tout, "chmod777 ton_fichier"...je le met ou ? dans le code ?

Je ne connais pas grand chose, pour ne pas dire rien, sur le niveau des droits utilisateurs.

Petite question quand tu parle d'administrateur, tu veux parler du site ou de la session de l'ordinateur ?
0
Leviathan49 Messages postés 257 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 22 juillet 2011 70
21 juin 2010 à 18:21
Au passage, j'avais oublié, si c'est juste déplacer le fichier1 vers fichier2 utilise la fonction
rename("chemin fichier 1","chemin fichier 2")
ca évite de copier puis supprimer le fichier.
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
22 juin 2010 à 08:35
Bonjour, oui j'avais vu cette fonction mais il me semblais qu'elle existait surtout pour renommer...je crois que le nom de la fonction m'a perturbé..

Je vais essayer merci

Bonne journée :)

Necro27
0