Problème fonction move_uploaded_file

Fermé
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 - 21 déc. 2009 à 10:31
 Utilisateur anonyme - 23 déc. 2009 à 13:14
Bonjour, j'ai un problème avec la fonction move_uploaded_file j'ai 2 scripts qui utilisent cette fonctionn voici mon code:


if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...*/
{

echo 'Upload du fichier ---> ' . $fichier . " effectué avec succès";


$Wmax = $_POST['largeur'];

$Hmax = $_POST['hauteur'];

$rep_Dst = $dossier;

$img_Dst = $fichier;

$rep_Src = $dossier;

$img_Src = $fichier;

}


else //Sinon (la fonction renvoie FALSE).

{

echo "news ---> " . $fichier . " déjà transféré, chapitre créé dans base ...";

}

J'ai un premiet script qui utilise cette fonction, chaque fois que j'utilise la fonction pour ce premier script, il passe systématiquement dans le premier test donc il transfère bien le fichier que je veux transférer mais chaque fois il passe dans le if et jamais dans le else alors qu'à partir de la deuxième fois il devrait passer dans le else.
Là ça ne me gène pas trop il doit écraser le fichier existant bon à la limite le fichier est monté donc ça me va bien que ça ne me plaise pas .

Mais où j'ai problème c'est que dans le deuxième script c'est l'inverse qui se produit systématiquement il passe chaque fois dans le else ce qui fait que mon fichier n'est jamais monté.

Est-ce que j'aurai mal codifié la fonction ? merci pour les réponses que vous pourrez m'apporter.
A voir également:

16 réponses

Utilisateur anonyme
21 déc. 2009 à 10:42
Déjà pour ton 1er cas, c'est normal qu'il "passe dans le if" sachant que la fonction move_uploaded_file écrase le fichier existant pour mettre le sien. Donc utilise plutôt la fonction file_exists($dossier . $fichier) pour savoir si ton fichier existe et met un un "!" devant, pour savoir qu'il n'existe pas.
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
21 déc. 2009 à 10:50
il faut faire :
if(is_file($dossier.$fichier)) //le fichier existe déjà
else if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //le fichier à bien était chargé
else // ERREUR
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
21 déc. 2009 à 11:26
Bonjour à tous, merci beaucoup pour vos réponses, bon j'ai rajouté le test if(!is_file($dossier.$fichier)) là effectivement dans le premier cas ça marche très bien je transfère mon fichier (ça marche le fichier est monté) puis quand j'essaie de retransférer le même là il me dis bien que ça a déjà ,été fait mais dans mon deuxième cas ça ne marche toujours pas et (je suis nouveau sur mandriva linux) il me dis systématiquement que j'ai une erreur c'est à dire qu'il re,tre bien dans if(!is_file($dossier.$fichier)) donc il trouve bien que le fichier n'existe pas mais ensuite il ne le monte pas il me mets erreur. Si je passe toujours dans cette fonction mais que je change juste le nom du dossier où il doit transférer et bien là ça marche !!! est-ce qu'il n'y aurait pas un problème d'autorisation au niveau de l'écriture dans un dossier avec mandriva ? je ne sait pas voici exactement mon code:

if(!is_file($dossier.$fichier)) //le fichier n'existe pas
{

if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...*/



{

echo 'Upload du fichier ---> ' . $fichier . " effectué avec succès";



$Wmax = $_POST['largeur'];

$Hmax = $_POST['hauteur'];

$rep_Dst = $dossier;

$img_Dst = $fichier;

$rep_Src = $dossier;

$img_Src = $fichier;

}


else //Sinon (la fonction renvoie FALSE).

{

echo "news ---> " . $fichier . " erreur au transfert";

}

}

else //Sinon (la fonction renvoie FALSE).

{

echo "news ---> " . $fichier . " déjà transféré, chapitre créé dans base ...";

}

Encore merci pour votre aide
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
21 déc. 2009 à 14:19
essaie ce code :

if(is_file($dossier.$fichier)) echo "news ---> " . $fichier . " déjà transféré, chapitre créé dans base ...";
else if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) {
	echo 'Upload du fichier ---> ' . $fichier . " effectué avec succès";
	$Wmax = $_POST['largeur'];
	$Hmax = $_POST['hauteur'];
	$rep_Dst = $dossier;
	$img_Dst = $fichier;
	$rep_Src = $dossier;
	$img_Src = $fichier;
}
else echo "news ---> " . $fichier . " erreur au transfert";


evite de trop étaler ton code ca devient illisible après
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
21 déc. 2009 à 16:17
Non j'ai toujours pareil erreur au transfert mais j'ai écris un autre topic parce que je me demande si j'ai pas un problème lié à mandriva si tu veux regarder ce que j'ai posté à ce propos , merci pour ton aide
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
21 déc. 2009 à 19:16
j'ai lu ton post pour mandriva

mais la question n'est pas là. la première fois que tu exécutes le script est ce que le fichier arrive bien dans le dossier?

que contiennent tes variables $dossier et $fichier

ensuite as tu mis enctype="multipart/form-data" dans la déclaration de ton formulaire?

sinon essaie d'utiliser cette fonction :

	function uploader($nom_fichier,$destination,$nom_fichier_renomme=NULL,$maxsize=false,$extensions=false) {
		if(!isset($_FILES[$nom_fichier]) || $_FILES[$nom_fichier]['error'] > 0) return false;
		if(!is_uploaded_file($_FILES[$nom_fichier]['tmp_name'])) return false;
		if($maxsize !== false && $_FILES[$nom_fichier]['size'] > $maxsize) return false;
		$ext = strtolower(substr(strrchr($_FILES[$nom_fichier]['name'],'.'),1));
		if($extensions !== false && !in_array($ext,$extensions)) return false;
		if(is_null($nom_fichier_renomme)) {
			$nom_fichier_renomme = $_FILES[$nom_fichier]['name'];
			$nb = '-'.(strlen($ext)+1);
			$nom_fichier_renomme = substr($nom_fichier_renomme,0,$nb);
		}
		if($destination == '') $destination = '.';
		$destination_final = $destination . '/' . $nom_fichier_renomme . '.' . $ext;
		$upload = move_uploaded_file($_FILES[$nom_fichier]['tmp_name'],$destination_final);
		if($upload) return array('nom' => $nom_fichier_renomme, 'extension' => $ext, 'size' => $_FILES[$nom_fichier]['size']);
		else return false;
	}


les arguments :

1 - $nom_fichier : correspond au name de ton formulaire et à $_FILES['ici c'est $nom_fichier'].
2 - $destination : correspond au dossier de destination.
3 - $nom_fichier_renomme : correspond au nom que tu veux donner au fichier si tu veux forcer un nom [optionnel]
4 - $maxsize : correspond à la taille max du fichier en octet [optionnel]
5 - $extensions : tableaux des extensions autorisé par exemple array('png','jpg','jpeg','gif') pour des images [optionnel]
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
21 déc. 2009 à 22:50
Bonsoir, pour répondre à tes questions:
1) oui j'ai déjà exécuté le script et le fichier est bien arrivé dans le dossier.
2) $dossier = /var/www/html/site_piauplongee/commun/news/
3) $fichier = thumb_1.jpg
4) dans la déclaration de mon formulaire j'ai bien : enctype="multipart/form-data"

Voilà; je n'arrive plus à monter le fichier thumb_1.jpg dans le dossier /var/www/html/site_piauplongee/commun/news/
je sors systématiquement par erreur au transfert qui est affiché quand la fonction move_uploaded_file renvoie false.

Je vais maintenant mettre en place ton code et je te tiens au courant. Merci
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
21 déc. 2009 à 23:22
Re bonsoir, c'est pareil avec ta fonction il ne monte pas le fichier, je comprends pas, désolé ça marche pas j'ai vérifié que j'avais bien ce qu'il faut dans $nom_fichier et $destination ça c'est bon mais j'ai toujours return false
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
21 déc. 2009 à 23:26
je précise qu'actuellement je travaille en local sur apache pour tester l'appli
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
22 déc. 2009 à 02:22
Bon, il n'y a rien à faire j'ai essayé plussieurs code mais ça ne marche toujours pas, il y a des discutions sur le net à propos de permissions au niveau du répertoire sur lequel je veux écrire des histoires de chmod mais là si quelqu'un pouvait m'aider ? je suis coincé merci pour votre aide
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
22 déc. 2009 à 10:08
Bonjour, est-ce qu'il est possible de savoir pourquoi la fonction move_uploaded_file ne marche pas par affichage d'un message d'erreur, si oui merci de me dire comment je peux faire car je suis toujours planté avec une fonction qui a marché et qui ne marche plus !!!! pour le moment je travaille en local sur mandriva, merci encore de bien vouloir m'aider
0
Utilisateur anonyme
22 déc. 2009 à 14:57
je n ai pas de problème pour uploader sous mandriva cela doit etre un probleme de droits d'acces
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
22 déc. 2009 à 18:50
Bonjour, je vais continuer mes tests en local sous mandriva, mais est-ce qu'il y a une log d'erreurs qui me permettrait d'avoir un message d'erreur si oui à quel endroit je peux trouver ça sinon, est-ce qu'
il y aurait une fonction php qui me permettrait d'avoir ce message d'erreur, ced qui me permettrait peut-être d'avancer parce que là je sais que la fonction move_uploaded_file ne marche pas mais je n'en sais pas plus. Merci pour votre aide.
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
23 déc. 2009 à 02:52
Bonsoir, bonne nuit plutôt, il est 2H30 du matin s'il vous plait je craque voici mon code

if(!is_file($dossier.$fichier))
{

if(move_uploaded_file($tmp_file, $dossier.$fichier))
{
echo 'Upload du fichier ---> ' . $fichier . " effectué avec succès";
}
else
{
echo "fichier ---> " . $fichier . " erreur au transfert";
}
}
else
{
echo "fichier ---> " . $fichier . " déjà transféré, chapitre créé dans base ...";
}


Voici ce que j'ai dans mes variables:
1) $tmp_file = /var/tmp/phpKhsKNe
2) $dossier = /var/www/html/site_piauplongee/commun/news/
3) $fichier = drapeau_anglais.jpg

et je n'arrive toujours pas à uploader mon fichier je sors avec le message fichier ---> drapeau_anglais.jpg erreur au transfert

S'il vous plait qu'est-ce que je peux faire, où est mon erreur ? je suis en local sur mon disque même pas chez mon hébergeur mais comment je peux savoir où est mon problème ?
Les droit d'accès sur mon dossier news sont les suivants : drwxrwxr-x je ne sais pas exactement ce que ça veut dire mais j'imagine read write rewrite est-ce que mon dossier poserait problème comment puis-je faire svp ? je ne comprends plus rien si vous pouviez au moins me dire comment je peux savoir qu'est-ce qui pose problème, j'ai lu des histoire de chmod 0777 mais là je ne sais pas ce que c'est, si vous pouviez m'aider merci
0
zatox Messages postés 640 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 26 juin 2020 66
23 déc. 2009 à 11:48
Bonjour, par rapport à mon problème de move_uploaded_file qui ne marche pas sous mandriva, j'ai une info supplémentaire qui s'adresse plutôt aux spécialistes de mandriva, je viens d'envoyer tout les fichiers du siet que je suis entrain de créér et de tester sous windows, la fonction move_uploaded_file sous windows marche très bien !!!!!! est-ce que quelqu'un pourrait m'éclairer, je pense que ce doit être un problème d'autorisations sur mandriva mais je ne sais pas quoi faire. Je vais poster également sur le forum linux.
Si vous pouviez m'aider ? merci beaucoup car c'est la galère.
0
Utilisateur anonyme
23 déc. 2009 à 13:14
en haut de la page tu as une petite enveloppe cliques dessus
0