Je travaille sur un espace membre avec possibilité d'uploader une image pour le profil. Le problème est que une fois l'image uploadée, je ne peux la changer que si la nouvelle image porte la même extension. C'est embêtant car je souhaite accepter les jpg, gif et png.
J'ai beau chercher, je ne vois pas d'où vient le problème :
// Upload de l'image
// Constantes
define('TARGET', 'avatars/');
define('MAX_SIZE',230000);
define('WIDTH_MAX', 800);
define('HEIGHT_MAX', 800);
// Tableaux de données
$tabExt = array('jpg','gif','png','jpeg','JPG','GIF','PNG','JPEG');
$infosImg = array();
// Variables
$extension = '';
$message = '';
$nomImage = '';
if(!empty($_POST))
{
// On verifie si le champ est rempli
if( !empty($_FILES['avatar']['name']) )
{
// Recuperation de l'extension de l'image et mise en minuscule
$extension = pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION);
$extension = strtolower(substr($_FILES['avatar']['name'],-3));
// On verifie l'extension du fichier
if(in_array(strtolower($extension),$tabExt))
{
// On recupere les dimensions du fichier
@$infosImg = getimagesize($_FILES['avatar']['tmp_name']);
if (empty($infosImg))
echo '<br/><div><h3>Your image is too large. You can change it.</h3><br /></div>';
else
echo '<br/><div></div>';
// On verifie le type de l'image
if($infosImg[2] >= 1 && $infosImg[2] <= 14)
{
// On verifie si l'image est dans les dimensions
if (($infosImg[0] <= WIDTH_MAX or $infosImg[0] > WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX or $infosImg[1] > HEIGHT_MAX) && (filesize($_FILES['avatar']['tmp_name']) <= MAX_SIZE))
//on redimensionne limage
$x = 150;
$y = 150; # Taille en pixel de l'image redimensionnée
if ($infosImg['mime']=='image/jpeg' ) {
$img_big = imagecreatefromjpeg($_FILES['avatar']['tmp_name']); # On ouvre l'image d'origine
@$img_new = imagecreate($x, $y);
# création de la miniature
@$img_mini = imagecreatetruecolor($x, $y)
or @$img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
@imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
@imagejpeg($img_mini,$_FILES['avatar']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/jpg' ) {
$img_big = imagecreatefrompng($_FILES['avatar']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
imagepng($img_mini,$_FILES['avatar']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/png' ) {
$img_big = imagecreatefrompng($_FILES['avatar']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
imagepng($img_mini,$_FILES['avatar']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/gif' ) {
$img_big = imagecreatefromgif($_FILES['avatar']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);
// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);
imagegif($img_mini,$_FILES['avatar']['tmp_name'] );
}
{
// Parcours du tableau d'erreurs
if(isset($_FILES['avatar']['error'])
&& UPLOAD_ERR_OK === $_FILES['avatar']['error'])
{
// On renomme le fichier
$nomImage = $username.'.'.$extension;
// Si c'est OK, on teste l'upload
if(move_uploaded_file($_FILES['avatar']['tmp_name'], TARGET.$nomImage))
{
$requete=mysql_query('insert into 1_validavatar(id, url_avatar, username) values ('.$_SESSION['userid'].', "'.TARGET.$nomImage.'", "'.$username.'")');