Upload d'image PHP
Par Damien ALEXANDRE le mercredi, novembre 21 2007, 14:41 - DevBlog - Lien permanent
Suite à quelques remarques pertinentes, et aussi à des développement perso j'ai développé une nouvelle version de mon script d'upload d'image. Je vous propose donc une toute nouvelle version de mon tutoriel sur l'upload d'images en PHP !
J'attends vos réactions, remarques et corrections de fôtes ^^
/
Commentaires
Salutations,
tu fais bien de ne pas te fier au type de fichier transmis via $_POST ceci dit c'est une erreur de se baser sur une extension de fichier. Rien n'empêche de renommer un fichier .php en .jpg et je ne te parle pas du résultat possible
Il vaut mieux te baser si possible par l'extension fileinfo ou par la commande shell (sauf Windows donc) "file -i tonfichier". Ces fonctions streament le fichier pour en déterminer le type ce qui évite les fausses entêtes.
Je test l'extension mais aussi le vrai type retourné par getimagesize(), c'est le type retourné par la lecture des premiers octects de l'image. Les deux sont éliminatoires. Si il s'agissait de fichier en général j'aurais utilisé fileinfo en effet, mais pour des images getimagesize() marche plutôt bien.
Merci d'appuyer sur ce point que je n'ai pas vraiment expliqué en effet.
Slt,
Un bon classique rediger proprement. Mais au file du temps j'ai du ajouter un partie de protection. Mes fichier son stocké en dessous de la racine du serveur sous des nom aléatoirement générer, comme sa 2 fichiers peuvent porter le meme nom mais apartenir à 2 personnes pour des espace perso par exemple. Pour les restituer je passe par de l'url-rewriting et une verification de l'authentification dans le fichier php qui va me restituer les fichier a l'aide des header et d'un readfile.
Bon courage.
@+
Pas mal, bien joué
Bonjour Damien, j'ai testé ton code et il marche à la perfection c'est exactement ce qu'il me fallait.
Cependant j'ai une autre petite question à te poser ! Voila on m'a demandé d'upload des images, jusque là ton script j'ai suivis à 100%, mais on m'a demandé d'uploader l'image dans 2 dossiers différents et c'est là que les ennuis commencent !
J'ai essayer de créer une autre variable $dest_dossier comme ceci : "$dest_retouche = 'Images/';"
Et j'ai executé la meme commande que pour l'upload dans le premier dossier c'est-à-dire : " // copie du fichier dans le second dossier redimensionné
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dest_retouche . $dest_fichier)) { $valid[] = "L'image $dest_fichier a été uploadé avec succés (<a href='".$dest_retouche . $dest_fichier."'>Voir</a>)"; } else { $erreurs[] = "Impossible d'uploader le fichier.<br />Veuillez vérifier que le dossier ".$dest_retouche." existe avec un chmod 755 (ou 777)."; }"Hélas une erreur apparait en me disant que le dossier n'existe pas ou que je n'ai pas les droits dessus hors ces affirmations sont fausses xD !
Du coup je me demandé si tu ne pouvais pas m'éclairer sur le sujet.
Merci d'avance !
// Extensions images autorisé (gif, jpeg et png) si autre voir commentaire de mimetype an dessous
$extensions_ok = array('gif','jpg', 'jpeg', 'png');
// MimeType autorisé
/* 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF (Ordre des octets Intel), 8 = TIFF (Ordre des octets Motorola), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF */
$typeimages_ok = array(1,2,3);
pour prendre d'autres extensions pour ceux qui rame comme moi
Sweeny :
pourquoi n'utiliserais-tu par la fonction copy() de PHP ?
- move_uploaded_file pour copier le fichier téléchargé dans le 1er dossier
- et copy pour copier le fichier qui est dans le 1er dossier vers le 2ème dossier
J'imagine que ça devrait bien marcher (du moment que tes deux dossiers sont accessibles en écriture).
Super, merci pour le script,
j'ai ajouté la ligne ::
chmod ($dest_dossier . $dest_fichier, 0755);
en dessous de ::
if(move_uploaded_file($_FILES'photo''tmp_name', $dest_dossier . $dest_fichier)) {
Car ca passait en 600 chez moi : /
Merci pour ce code,
j'ai rajouté quelques lignes pour gérer la taille de l'image (hauteur/laurgeur)
if( $getimagesize[0] > $largeur_max )
{ $erreurs = "La largeur de l'image ne doit pas dépasser: $largeur_max pixels"; }
if( $getimagesize[1] > $hauteur_max )
{ $erreurs = "La hauteur de l'image ne doit pas dépasser: $hauteur_max pixels"; }
bonne continuation
lorsque j'utilise ton script ca m'affiche ca comme erreur :
Parse error: syntax error, unexpected '[', expecting ')'
cela se situe a la declaration de l'Array contenu par la variable $_FILES’photo’ merci d'avance de votre aide
$extensions_ok = array('gif','jpg', 'jpeg', 'png');
// MimeType autorisé
/* 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF (Ordre des octets Intel), 8 = TIFF (Ordre des octets Motorola), 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC, 14 = IFF */
$typeimages_ok = array(1,2,3);
et pour pdf?
Bonsoir,
apres upload de l'image c'est ce message
Array ( name => wotlk3.jpg type => image/jpeg tmp_name => /tmp/phpuuc7sj error => 0 size => 21068 )
qui s'affiche, enfin les propietes de l'image uploadé, je debute en php et j'aimerai savoir si quelqu'un peu m'indiquer comment eviter que ces information ne s'affiche ??
Retire tout simplement le print_r() dans le code
merci de l'info Damien
Bonjour,
Tres bon script mais comment puis-je ajouter l'extension pour uploader des fichiers CR2 ?
J'ai ajouté :
$extensions_ok = array('jpg', 'jpeg', 'cr2');mais pour $typeimages_ok = array(2); je ne sais pas quoi mettre ?
Merci d'avance pour votre aide.
J-P
Bonjour,
Je voudrais savoir comment faire pour ajouter des champs:
Nom et Prénom
Pays
E-mail
Et envoyer le tout avec l'image
Merci d'avance
Jo
merci beaucoup pour ton superbe script !!!!
je vois qu'il n'y a pas grand monde qui à posté alors je te remercie aussi pour ces ingrats !
et encore une fois merciiiiii !!!!! =D
slt,
j'ai testé le code complet mais il y'a une erreur :
Notice: Undefined index: photo in C:\wamp\www\uploade\php.php on line 33.
merci.
Bonjour,
Avant tout je dirais super tuto, surtout pour un débutant comme moi.
Aujourd'hui j'ai un souci... Je souhaiterais créer des miniatures mais aussi posé une signature sur toute mes images. J'ai lus qu'il était préférable de créer 3 dossier: le dossier upload: image original, le dossier mini: image miniature et le dossier image: celui qui contiendras les images avec ma signature. Mais je n'arrive pas a créerr le script pour créé les miniatures et les images avec la signature. serait-il possible d'avoir de l'aide s'il vous plait? J'essai de créer mon portfolio... merci d'avance.
ps: je m'excuse d'avance pour mes fautes de français, la aussi... je ne suis pas doué.