Déplacer un fichier d'un dossier1 -> dossier2
Résolu
necro27
Messages postés
175
Statut
Membre
-
necro27 Messages postés 175 Statut Membre -
necro27 Messages postés 175 Statut Membre -
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
-> transfert du fichier vers le dossier 1
-> insertion du nom du fichier dans la bdd
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
-> lecture du dossier 1
--> si le dossier 1 n'est pas vide :
->$fichier1 prend la valeur du fichier contenu dans le dossier1 (je pense)
-> $fichier2 prend la valeur du fichier à déplacer dans le dossier 2
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
-> copie du fichier contenu dans le dossier 1 vers le dossier 2
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
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:
- Déplacer un fichier d'un dossier1 -> dossier2
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Déplacer colonne excel - Guide
- Fichier rar - Guide
3 réponses
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")
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
Code modifié (en gras ci-dessus):
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 -->
La je bûche...
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...
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
ç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
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é
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é
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é";
}
}
}
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é";
}
}
}
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:
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)
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)
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
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
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
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