Upload de fichier image redimensionné en .jpg

Eléphanteau du PHP | 35 Messages

18 avr. 2008, 12:18

:D Après maintes recherches(merci Google!! et AB), une bonne nuit de sommeil et parce que je suis Maitre phpinfo() :wink: j'ai solutionné le problème de cette façon:
<?php
if( isset($_POST['valpost']) ){ // si formulaire soumis
    $target = 'images/'; // dossier où sera déplacé le fichier
    $tmp_file = $_FILES['fileimage']['tmp_name'];
    if( !is_uploaded_file($tmp_file) ){
        exit("Le fichier est introuvable");
    }
    // on vérifie maintenant l'extension
    $type_file = $_FILES['fileimage']['type'];
    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') ){
        exit("Le fichier n'est pas une image");
    }
    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fileimage']['name'];
	$real = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;
	$path_file= $real.'site_1/'.$target.$name_file;
	// On récupère les dimensions du fichier 
	$infos_img = getimagesize($_FILES['fileimage']['tmp_name']);
    if( !move_uploaded_file($tmp_file, $target . $name_file) ){
        exit("Impossible de copier le fichier dans $content_dir");
	}else{
		//poids maximum en octet
		$max_size = 100000;
		//largeur maximale en pixel
		$width_max = 425;
		//hauteur maximale en pixel
		$height_max = 425;
		//Retourne la largeur d'une image
		$imgWidth = $infos_img[0];
		//Retourne la longueur d'une image
		$imgHeight = $infos_img[1];
		//Facteur largeur/hauteur des dimensions max
		$whFact = $width_max/$height_max;
		//Facteur largeur/hauteur de l'original
		$imgWhFact = $imgWidth/$imgHeight;
		//fixe les dimensions du thumb
		if($whFact < $imgWhFact){//Si largeur déterminante
			$thumbWidth = $width_max;
			$thumbHeight = round($thumbWidth/$imgWhFact);
			} else { //Si hauteur déterminante
					$thumbHeight = $height_max;
					$thumbWidth = round($thumbHeight*$imgWhFact);
			}
		//Crée le thumb (image réduite)
		$imgThumb = ImageCreateTruecolor($thumbWidth, $thumbHeight);
		//création de la nouvelle image à partir de l'URL $chemin_complet
		$imageresize = imagecreatefromjpeg($path_file);
		// redimension  et rééchantillonnage de la nouvelle image
		imagecopyresampled($imgThumb, $imageresize, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight);
		//Insère l'image de base redimensionnée
		imagejpeg($imgThumb, $path_file, 70);
		//Tous pour le propriétaire, lecture et exécution pour les autres
		chmod("{$target}{$nomImage}",0755);
		//on libère de la mémoire
		imagedestroy($imgThumb);
   	echo "Le fichier a bien été uploadé";
	}
}
?>
et le formulaire

Code : Tout sélectionner

<form enctype="multipart/form-data" method="post" action="upload.php"> <input type="file" name="fileimage" size="40"> <input type="submit" name="valpost" value="Uploader" onclick="submit()" /> </form>
et ça fonctionne impécable :D
On peut toujours l'améliorer avec la gestion des .png etc...

Merci à tous

EDIT
Je rajoute un petit plus...IE à une façon différente de gérer le cache que Firefox. Pour résoudre ce problème qui gêne en général l'affichage, je fais comme ça:
echo '<img src="'.$target . $name_file.'?'.time().'"/>';
Peu de gens sont dignes de ne croire à rien.