begin process at 2012 05 27 20:46:04
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > UPLOAD IMAGE AVEC MINIATURE

UPLOAD IMAGE AVEC MINIATURE


 Information sur la source

Note :
4,5 / 10 - par 2 personnes
4,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Classé sous :php, upload, image, miniature, gd Niveau :Initié Date de création :22/01/2011 Date de mise à jour :30/01/2011 17:03:23 Vu :5 146

Auteur : dilar

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note


 Description

ce script vous permet de télécharger une image et de créer des miniature pour différent extension comme GIF, PNG, JPEG, WBMP et XPM

Source

  • <!-- formulaire d'upload-->
  • <form method="post" enctype="multipart/form-data" action="">
  • <p>
  • <input type="file" name="file" size="30">
  • <input type="submit" name="upload" value="Envoyer">
  • </p>
  • </form>
  • <?php
  • function getExtension($str)
  • {
  • $i = strrpos($str,".");
  • if (!$i) { return ""; }
  • $l = strlen($str) - $i;
  • $ext = substr($str,$i+1,$l);
  • return $ext;
  • }
  • if(isset($_POST['upload']))
  • {
  • define ("MAX_SIZE", "400");
  • $errors = 0;
  • $filename = $_FILES["file"]["name"];
  • $uploadedfile = $_FILES['file']['tmp_name'];
  • $type_file = $_FILES['file']['type'];
  • if ($filename)
  • {
  • if( !is_uploaded_file($uploadedfile) )
  • {
  • exit("Le fichier est introuvable");
  • }
  • // on vérifie maintenant l'extension
  • elseif( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
  • {
  • exit("Le fichier n'est pas une image");
  • }
  • else
  • {
  • $size = filesize($_FILES['file']['tmp_name']);
  • if ($size > MAX_SIZE*1024)
  • {
  • exit ("verifier la taille de votre image!!");
  • $errors=1;
  • }
  • $extension = getExtension($filename);
  • $extension = strtolower($extension);
  • if($extension=="jpg" || $extension=="jpeg" )
  • {
  • $uploadedfile = $_FILES['file']['tmp_name'];
  • $src = imagecreatefromjpeg($uploadedfile);
  • }
  • else if($extension=="png")
  • {
  • $uploadedfile = $_FILES['file']['tmp_name'];
  • $src = imagecreatefrompng($uploadedfile);
  • }
  • else
  • $src = imagecreatefromgif($uploadedfile);
  • list($width,$height) = getimagesize($uploadedfile);
  • $newwidth = 60;
  • $newheight = ($height/$width)*$newwidth;
  • $tmp = imagecreatetruecolor($newwidth,$newheight);
  • $newwidth1 = 25;
  • $newheight1 = ($height/$width)*$newwidth1;
  • $tmp1 = imagecreatetruecolor($newwidth1,$newheight1);
  • imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
  • imagecopyresampled($tmp1, $src, 0, 0, 0, 0, $newwidth1, $newheight1, $width, $height);
  • $filename = "". $_FILES['file']['name'];
  • $filename1 = "small". $_FILES['file']['name'];
  • imagejpeg($tmp,$filename,100);
  • imagejpeg($tmp1,$filename1,100);
  • imagedestroy($src);
  • imagedestroy($tmp);
  • imagedestroy($tmp1);
  • echo "miniature: <img src='{$filename1}'/><br/><br/>";
  • echo "image originale: <img src='{$filename}'/>";
  • }
  • }
  • }
  • ?>
<!-- formulaire d'upload-->
<form method="post" enctype="multipart/form-data" action="">
	<p>
		<input type="file" name="file" size="30">
		<input type="submit" name="upload" value="Envoyer">
	</p>
</form>

<?php
function getExtension($str) 
{

         $i = strrpos($str,".");
         if (!$i) { return ""; } 
         $l = strlen($str) - $i;
         $ext = substr($str,$i+1,$l);
         return $ext;
}
if(isset($_POST['upload']))
{
	define ("MAX_SIZE",	"400");
	$errors	=	0;
	$filename		=	$_FILES["file"]["name"];
	$uploadedfile 	= 	$_FILES['file']['tmp_name'];
	$type_file 		= $_FILES['file']['type'];
	if ($filename) 
	{
		if( !is_uploaded_file($uploadedfile) )
		{
			exit("Le fichier est introuvable");
		}
		// on vérifie maintenant l'extension
		elseif( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
		{
			exit("Le fichier n'est pas une image");
		}
		else
		{
			
			$size		=	filesize($_FILES['file']['tmp_name']);
			if ($size > MAX_SIZE*1024)
			{
				exit ("verifier la taille de votre image!!");
				$errors=1;
			}
			$extension 	= 	getExtension($filename);
			$extension 	= 	strtolower($extension);
			if($extension=="jpg" || $extension=="jpeg" )
			{
				$uploadedfile 	= 	$_FILES['file']['tmp_name'];
				$src 			= 	imagecreatefromjpeg($uploadedfile);
			}
			else if($extension=="png")
			{
				$uploadedfile 	= 	$_FILES['file']['tmp_name'];
				$src 			= 	imagecreatefrompng($uploadedfile);
			}
			else 
				$src 	= 	imagecreatefromgif($uploadedfile);
			
			list($width,$height)	=	getimagesize($uploadedfile);

			$newwidth	=	60;
			$newheight	=	($height/$width)*$newwidth;
			$tmp		=	imagecreatetruecolor($newwidth,$newheight);

			$newwidth1	=	25;
			$newheight1	=	($height/$width)*$newwidth1;
			$tmp1		=	imagecreatetruecolor($newwidth1,$newheight1);

			imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

			imagecopyresampled($tmp1, $src, 0, 0, 0, 0, $newwidth1, $newheight1, $width, $height);

			$filename 	= 	"". $_FILES['file']['name'];
			$filename1 	= 	"small". $_FILES['file']['name'];

			imagejpeg($tmp,$filename,100);
			imagejpeg($tmp1,$filename1,100);

			imagedestroy($src);
			imagedestroy($tmp);
			imagedestroy($tmp1);
			echo "miniature: <img src='{$filename1}'/><br/><br/>";
			echo "image originale: <img src='{$filename}'/>";
		}
	}
	
}
	
?>

 Conclusion

PHP ne se limite pas à la génération de pages HTML. Il peut aussi servir à créer et manipuler des images, dans un grand choix de formats. Et PHP peut même générer directement des images pour le navigateur, avec la bibliothèque GD.


 Historique

30 janvier 2011 17:03:23 :
ajout d'un formulaire d'upload et plus de sécurité pour le code. merci les amis:)

 Sources du même auteur

VÉRIFICATION DES URL VALIDE AVEC PHP
CRÉER UNE IMAGE À PARTIR DU TEXTE

 Sources de la même categorie

AFFICHÉ SUR UN TABLEAU AVEC PAGINATION ET BASE DE DONNÉES par stormxp
Source avec Zip Source avec une capture GENERATEUR D'ONGLET DE NAVIGATION PHP par pos123
FORMATER UN LIEN YOUTUBE, DAILYMOTION OU VIMEO POUR L'UTILIS... par kgb93
Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
Source avec Zip Source avec une capture SYSTEME D'AUTHENTIFICATION PHP AVEC PROTÉCTION KEYLOGGER par mtrix000

 Sources en rapport avec celle ci

REDIMENSIONNEMENT D'IMAGE PHP par JStevens
CRÉER UNE IMAGE À PARTIR DU TEXTE par dilar
Source avec Zip FAIRE DES MINIATURE D'IMAGE, DES PHOTOS POUR LES PROFILS par zulrigh
Source avec Zip Source avec une capture CLASSE LECTUREENLIGNE - POUR LES SITES DE SCANTRAD OU ... par tiger222
Source avec Zip CLASSE DE MINIATURISATION D'IMAGE par Palleas_44

Commentaires et avis

Commentaire de fenoril le 22/01/2011 16:58:53

Salut !

Bon, avant test vu tout ce qui manque pour le mettre en place, quelques remarques dans un but constructif :
Il manque les commentaires (on est là pour apprendre...).
Une faute : Ligne 16, il manque l'échappement du '. (sinon succès s'écrit avec un accent grave au passage ;P)
Pour réellement tester, il manque quand même un formulaire d'envoi.
Parallèlement, il faudrait noter que sans une sécurisation minimum (Par exemple tester les caractères de hack dans le nom), ce script doit être conservé uniquement pour une zone sûre du site.

Par opposition, un bel effort d'indentation rend cette page carrément lisible ça fait plaisir.

Merci à toi et bon courage.

Commentaire de deoxis9000 le 23/01/2011 10:44:46

salut
ton code manque quand même un peu de commentaire
encore un truc
c'est pas trés sécurisé car je peux mettre un fichier autre que les fichiers images
je renomme le ficher .jpg et puis c'est un fichier javascript donc la sécurité n'y est pas.
merci à toi

Commentaire de fenoril le 23/01/2011 14:41:12

Deuxième salve...

J'ai testé avec un fichier nommé "test.php" sur mon xampp dans le dossier "zerOzerO" (ligne à changer au cas où dans la fonction formulaire), avec le code joint à la fin.

Voici quelques remarques qui font que je n'étudierais pas plus ce code avant ta réaction :

1. getExtension sort d'où ? j'ai bien trouvé des sources créant cette fonction mais pas php de base.
2. Erreur ligne 38 : pas de crochet pour spécifier la zone couverte par le else.
3. $uploadedfile : pourquoi le redéfinir plusieurs fois ?
4. Je ne comprend pas la gestion des dimensions du fichier original (pourquoi faire h=h*60/w ?), et je crois que ça les change sans raison, mais sans être sûre (j'ai pas vérifié ces fonctions).
5. Il manque des gestions d'erreur puisque ce code ne plante pas, m'affiche "succès" mais j'ai pas de fichier... Là j'ai bien cherché.
6. La premières remarques restent valident.

Pour info je suis en php 5.3

Voici le code que j'ai utilisé :
define ("MAX_SIZE", "400");

if (isset($_REQUEST['upload'])) {
addimage();
} else {
formulaire();
}

function formulaire(){
?>
<form method="POST" action="http://localhost/zerOzerO/test.php?upload=1">
<input type="file" name="name" />
<input type="submit" name="submit" value="Envoyer" />
</form>

<?php
}
function addimage(){
$errors =0;
if($_SERVER["REQUEST_METHOD"] == "POST")
{
$image = $_FILES["file"]["name"];
$uploadedfile = $_FILES['file']['tmp_name'];

if ($image) {
$filename = stripslashes($_FILES['file']['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) {
echo 'verifier l\'extension de votre image!!';
$errors = 1;
} else {
$size = filesize($_FILES['file']['tmp_name']);
if ($size > MAX_SIZE*1024)
{
echo "verifier la taille de votre image!!";
$errors=1;
}

if($extension=="jpg" || $extension=="jpeg" )
{
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png")
{
$src = imagecreatefrompng($uploadedfile);
}
else  {
$src = imagecreatefromgif($uploadedfile);
}

list($width,$height) = getimagesize($uploadedfile);

$newwidth = 60;
$newheight = ($height/$width)*$newwidth;
$tmp = imagecreatetruecolor($newwidth,$newheight);

$newwidth1 = 25;
$newheight1 = ($height/$width)*$newwidth1;
$tmp1 = imagecreatetruecolor($newwidth1,$newheight1);

imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

imagecopyresampled($tmp1, $src, 0, 0, 0, 0, $newwidth1, $newheight1, $width, $height);

$filename = $_FILES['file']['name'];
$filename1 = "small". $_FILES['file']['name'];

imagejpeg($tmp,$filename,100);
imagejpeg($tmp1,$filename1,100);

imagedestroy($src);
imagedestroy($tmp);
imagedestroy($tmp1);
}
}
}

// Afficher message de retour
if(!$errors)
echo "Succès!";
else echo "Erreur!!!";
}

Commentaire de sagat06 le 24/01/2011 10:17:22

Salut,

ta manière d'obtenir l'extension de l'image ouvre la porte à des failles de sécurité.
Personnellement j'utilise ceci:

$extension= $_FILES['fichier']['type'];
$boo= explode("/",$extension);  // l'extension se trouve dans boo[1]

Tu n'as plus qu'à tester si c'est du gif, du png, ce que tu veux...

A part ça, le reste à l'air nickel, mise à part le nom que tu devrais tester pour eviter là aussi les failles.

J'espère que ça pourra t'aider.

Commentaire de Qtronik le 24/01/2011 21:39:37

Bonjour,

C'est un bien bel example mais,
Il y a une deuxieme technique de vérification de l'image... Le Meta de l'image... Vite comme cela j'ai pas mon "snipet" à porté de main pour tester le meta de l'image (depuis mon cellulaire) Mais bon il est toujours préférable d'utiliser le plus de tests possible sur l'upload d'une image... (pjpeg/jpeg) Fournis par Iexplorer par example.

Merci de la simplicité de ton code. Les nom de tes functions explique bien l'absence de commentaires, mais pour les débutant ce n'est pas évident !

Bonne journée!

Commentaire de Qtronik le 25/01/2011 02:53:42 8/10

Voila de quoi aider pour les appeuré de protection de vérification du format de l'image en surplus !:

$uploadedfile = getimagesize($_FILES['avatar']['tmp_name']);

//--- Iexplorer
$extensions_MIMEautoriseesIE = array('image/pjpg', 'image/pjpeg', 'image/jpg');

//--- Mozilla
$extensions_MIMEautoriseesMF = array('image/jpg', 'image/jpeg', 'image/jpg');

if
(in_array($uploadedfile ['mime'], $extensions_MIMEautoriseesMF)
|| in_array($uploadedfile ['mime'], $extensions_MIMEautoriseesMF))
{
    echo "Mime |".$infosImageSize['mime']."| Autorisé<br/>";
    //--- et blha blah blah... le reste du code dans le if
}

Commentaire de fenoril le 25/01/2011 15:27:34

Hihi, j'enlève la surveillance par mail, je ne comprends plus grand chose à la discussion...

Deux exemples :
Sagat trouve que la méthode de récupération de l'extension de dilar est dangereuse mais... en fait il n'en propose pas puisque getExtension n'existe pas...
Qtronik trouve que les noms de fonctions excusent l'absence de commentaire, mais y'à pas de fonction dans le code...

Et surtout, vous avez l'air de trouver le code pas mal, mais en l'état il ne peut fonctionner, c'est quand même le truc le plus important pour l'instant non ?

Soit dit sans animosité, j'ai l'impression que vous l'avez un peu survolé quand même messieurs.

Commentaire de Qtronik le 25/01/2011 16:12:02

Tu as raison

Ce que je voulais dire, fonctions, vriables, tout les choses que l'ont peut renommer soit même vont partis de l'aide a la compréension...

Désolé...

Je vais poster moi même le code extrêmement complet pour uploader une image transformer en deux image d tailles différentes pour deux dossier dans quelque instant. Soyez y ;o)

Commentaire de Vonscott le 25/01/2011 20:20:21 1/10

Aucune sécurité, sans parler de POO cela aurait pu etre au moins une classe.
Aucun intérét. "Niveau initié" mdr

Commentaire de Qtronik le 26/01/2011 03:48:34

Changer un script en classe c'est très facile ! Seulement pour une meilleur compréhension pour les débutant il est mieux de commencer en script tout cour sans "includes" ou mise en "classe".

Pour les bon connaisseurs de classe je crois que ce script ne les intéressent pas beaucoup... Si ce sont des classe que vous cherchez et bien le site phpclasses.com vous serait favorable !

Voici justement un lien vers une classe pour contrôler les images:
http://www.phpclasses.org/package/5548-PHP-Validate-and-process-uploaded-image-files.html

Bon codage facile...

Commentaire de neigedhiver le 26/01/2011 12:32:52

Ca choque personne que dans le code de la source il y ait deux fois imagejpeg() ?
Et ça choque personne qu'ensuite il affiche du texte ?
Et tout ça, sans préciser le type mime au navigateur avec un header approprié...

Commentaire de Qtronik le 26/01/2011 16:39:56

Ici il y a un code simple qui n'est pas un système complet... Pour les systemecomplet il y a d'autre site par exemple siduzero.com...

Commentaire de fenoril le 27/01/2011 22:22:35

Salut !

@ neige d'hiver, j'ai cessé la liste des erreurs parceque celles trouvées précédemment n'ont pas été corrigée depuis une semaine et que ce code ne peut PAS fonctionner en l'état. Je ne connais pas bien les fonctions d'image de php, j'espérais au passage les découvrir, aussi merci d'avoir relevé cette énormité, car du coup j'ai regardé la doc, et donc effectivement deux sorties écran d'image avant d'imprimer un texte... Je renonce...

@Qtronik Merci pour le lien vers la classe, elle est très instructive.

Commentaire de fenoril le 05/02/2011 18:03:27

beaucoup mieux comme ça... Aisément transformable en fonction ou méthode.

Reste encore un peu de manque de sécurité sur les extensions, mais qtronix et sagat06 on donné deux méthodes qui fonctionnent. Par ailleurs, autre moyen de faire des dégâts : Les caractères de hack (null byte etc...) dans le nom de fichier, mais comme ça prend du temps à mettre en place pour le hacker (car ça dépend de notrer code), c'est moins problématique.

Merci dilar !

Commentaire de Qtronik le 05/02/2011 18:16:36

Bonjour,
@Fenoril Connais tu l'information pour ces autres failles ? Je suis curieux de savoir comment encore plus protêger mes upload d'images ou d'autre fichiers.

C'est que mon projet ne doit pas avoir aucune faille alors je prend toute les techniques et les joints ensemble dans une seul et parfaite formule. Ensuite je metterai le code le plus complet ici même pour ma partis de upload d'images.

Merci, et bonne journée ! C'est bcp l'hiver ici au Québec

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Liens PHP (appel d'un fichier PHP) [ par vincf1 ] Bonjour à tous tout d'abord Voila, j'explique mon petit soucis (je suis novice en PHP ).Mon but est d'afficher une image miniat Couper le bas d'une image (GD PHP) [ par dezeque ] bonjour,j'aimerai savoir comment faire pour couper le bas d'une image ?elle fais 600X800 et j'aimerai enlver les 50 dernirers pixels du bas pour quell Upload d'image avec FireFox [ par ripoux ] Bonjour,Je sais que j'avais deja pos&#233; la question, mais aucune r&#233;ponse valable m'avait &#233;t&#233; donn&#233;e, et je chercher toujours !J Création de miniature lors de l'upload d'une image [ par jizz666 ] Hello, Je suis actuellement entrain de cr&#233;er un album photo en PHP/MySQL. Mais j'ai un petit probl&#232;me, je n'arrive pas &#224; cr&#233;er l Image GD et php ! prob d'affichage [ par riecola ] Bonjour tout le monde. Voil&#224; mon probl&#232;me : mon utilisateur selectionne une image et un texte au choix dans un formulaire ensuite une page s Problème Upload/Get [ par R3dDragon ] J'ai un petit soucis, expliquez en détails ci-dessous:Un système d'upload envoi à la page rec.php, la variable $image, et pour que les gens ne soit pa Réaffichage d'un formulaire [ par ninoy ] Bonjour!Je suis en train de créer un formulaire,et j'ai quelques problèmes...Pour commencer, mon formulaire contient 2 input type text, un textarea et Problème GD [ par guillaumeoki ] Bonjour,J'ai une image php que j'appelle par image.php?u=.pngEt j'aimerais le changer en image.png je sais que c'est possible mais je ne sais pas comm affichage d'image en miniature en php [ par ffrany ] Bonjour,j'ai crée un site web en php. Et j'ai pas mal d'images à afficher. Mais j'aimerais afficher ces images en php en bande roulantes (ces images d upload image [ par mnassar ] je suis un debuteur en php alors je trouve un problème au niveau de upload de l'image et voila le message d'erreurWarning: move_uploaded_file(../imag


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales