Fonction move_uploaded_file() ne fonctionne pas
Posté : 11 août 2010, 15:00
Bonjour,
J’aurais besoin de votre aide car je bloque sur un petit problème : j’ai écrit un petit script comprenant un formulaire qui envoie une image (appelons-la « avatar »), et j’aimerais bien pouvoir l’enregistrer sur le serveur (enfin, sur mon disque dur en local).
Tout se passe bien jusqu’au moment d’utiliser la fonction move_uploaded_file() ; celle-ci ne renvoie pas d’erreur, juste « false », et l’image n’est donc pas déplacée dans le dossier désiré.
Je ne sais pas ce qui est faux, le php.ini a l’air en ordre et les paramètres envoyés à la fonction semblent corrects également…
Bref, je suis un peu perdu. Je vous mets le code qui nous intéresse (le tableau de session est utile pour le reste du code, c’est pourquoi je n’ai pas mis qu’une simple variable) :
Je n’ai pas pu tester la suite du code, après la fonction move_uploaded_file(), mais si quelque chose est faux, n’hésitez pas à me le signaler.
Comme vous vous en doutez, aucune image n’est créée dans mon dossier. Ça m’embête.
Si vous voyez le problème ou que vous avez besoin de plus d’informations, n’hésitez pas à me le dire.
Merci d’avance pour vos réponses !
Cordialement.
J’aurais besoin de votre aide car je bloque sur un petit problème : j’ai écrit un petit script comprenant un formulaire qui envoie une image (appelons-la « avatar »), et j’aimerais bien pouvoir l’enregistrer sur le serveur (enfin, sur mon disque dur en local).
Tout se passe bien jusqu’au moment d’utiliser la fonction move_uploaded_file() ; celle-ci ne renvoie pas d’erreur, juste « false », et l’image n’est donc pas déplacée dans le dossier désiré.
Je ne sais pas ce qui est faux, le php.ini a l’air en ordre et les paramètres envoyés à la fonction semblent corrects également…
Bref, je suis un peu perdu. Je vous mets le code qui nous intéresse (le tableau de session est utile pour le reste du code, c’est pourquoi je n’ai pas mis qu’une simple variable) :
<?php
if (isset($_GET['modifier']))
{
?>
<form method="post" action="profil.php" enctype="multipart/form-data">
<label for="avatar">Changer mon avatar :</label>
<input type="file" name="avatar" id="avatar" />
<input type="submit" value="Modifier mon profil" />
</form>
<?php
}
if (isset($_FILES['avatar']) AND $_FILES['avatar']['error'] == 0)
{
if ($_FILES['avatar']['size'] <= 200000)
{
$fichier = pathinfo($_FILES['avatar']['name']);
$extension = $fichier['extension'];
$extensionsAutorisees = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($extension, $extensionsAutorisees))
{
$nom = $_SESSION['id'] . '.' . $extension;
if (move_uploaded_file($_FILES['avatar']['tmp_name'], 'avatars/' . $nom))
{
$req = $bdd->prepare('UPDATE membres SET avatar = :avatar WHERE id = :id');
$req->execute(array('avatar' => $nom, 'id' => $_SESSION['id']));
$req->closeCursor();
$image = ($extension == 'jpg' OR $extension == 'jpeg') ? imagecreatefromjpeg('avatars/' . $nom) : (($extension == 'gif') ? imagecreatefromgif('avatars/' . $nom) : imagecreatefrompng('avatars/' . $nom));
$largeurImage = imagesx($image);
$hauteurImage = imagesy($image);
if ($largeurImage > 100 OR $hauteurImage > 100)
{
$reduction = max($largeurImage / 100, $hauteurImage / 100);
$avatar = imagecreatetruecolor(round($largeurImage / $reduction), round($hauteurImage / $reduction));
$largeurAvatar = imagesx($avatar);
$hauteurAvatar = imagesy($avatar);
imagecopyresampled($avatar, $image, 0, 0, 0, 0, $largeurAvatar, $hauteurAvatar, $largeurImage, $hauteurImage);
if ($extension == 'jpg' OR $extension == 'jpeg')
imagejpeg($avatar, 'avatars/' . $nom);
else if ($extension == 'gif')
imagegif($avatar, 'avatars/' . $nom);
else
imagepng($avatar, 'avatars/' . $nom);
}
}
else
$_SESSION['erreurs'][] = 'L\'image n\'a pas pu être chargée.';
}
else
$_SESSION['erreurs'][] = 'L\'extension de cette image n\'est pas autorisée.';
}
else
$_SESSION['erreurs'][] = 'La taille de l\'image est trop importante. Elle ne doit pas dépasser 200000 octets.';
}
if (isset($_SESSION['erreurs']))
header('Location: profil.php?modifier');
?>
Je suis redirigé vers la modification du « profil », avec mon message d’erreur personnalisé (« l’image n’a pas pu être chargée ») qui s’affiche.Je n’ai pas pu tester la suite du code, après la fonction move_uploaded_file(), mais si quelque chose est faux, n’hésitez pas à me le signaler.
Comme vous vous en doutez, aucune image n’est créée dans mon dossier. Ça m’embête.
Si vous voyez le problème ou que vous avez besoin de plus d’informations, n’hésitez pas à me le dire.
Merci d’avance pour vos réponses !
Cordialement.