samedi 8 septembre 2007

Upload d'image vers un serveur


Salut,
Aujourd'hui, dans cet article je vais essayer de vous présenter un système d'upload d'image vers un serveur tout en passant par le PHP.
Ce système ne comporte qu'un seul fichier "upload.php" .
Ce fichier sera composé de :
  • Formulaire pour selectionner l'image à uploader
  • Script pour contrôler l'image (taille, extension, dimensions, nom du fichier ...) et l'uploader
On commence par le formulaire :
<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="hidden" name="posted" value="1" />
//pour permettre de vérifier qu'une requête vient d'être transmise par le formulaire
<input name="fichier" type="file" /><br />
<input type="submit" value="Uploader" />
</form>
==> Aperçu :


Puis on passe au script PHP qui va contrôler l'image et l'uploader après :

//----------------------------
// DEFINITION DES VARIABLES
//----------------------------

$target = 'fichiers/'; // Repertoire cible
$extension = 'gif';
// Extension 1 permise du fichier sans le .
$extension2 = 'png'; // Extension 2 permise du fichier sans le .
$extension3 = 'jpg'; // Extension 3 permise du fichier sans le .
$max_size = 250000; // Taille max en octets du fichier
$width_max = 1024; // Largeur max de l'image en pixels
$height_max = 768; // Hauteur max de l'image en pixels

//---------------------------------------------
// DEFINITION DES VARIABLES LIEES AU FICHIER
//---------------------------------------------

$time = time();
$nom_file = $_FILES['fichier']['name'];
$tmp = $_FILES['fichier']['tmp_name'];

//----------------------
// SCRIPT D'UPLOAD
//----------------------

if(!empty($_POST['posted']))
{
// On vérifie si le champ est rempli
if(!empty($_FILES['fichier']['name']))
{
// On vérifie l'extension du fichier
if(substr($nom_file, -3) == $extension OR substr($nom_file, -3) == $extension2 OR substr($nom_file, -3) == $extension3)
{
// On récupère les dimensions du fichier
$infos_img = getimagesize($_FILES['fichier']['tmp_name']);

// On vérifie les dimensions et taille de l'image
if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size))
{
// Si c'est OK, on teste l'upload

if (move_uploaded_file ($_FILES['fichier']['tmp_name'] , $target.$time.'_'.$_FILES['fichier']['name'] ) )
{
// Si upload OK alors on affiche le message de réussite
echo '<b>Image uploadée avec succès !</b>';
echo '<hr />';
echo '<b>Fichier :</b> ',$time,'_',$_FILES['fichier']['name'], '<br />';
echo '<b>Taille :</b> ', $_FILES['fichier']['size'], ' Octets<br />';
echo '<b>Largeur :</b> ', $infos_img[0], ' px<br />'; echo '<b>Hauteur :</b> ', $infos_img[1], ' px<br />'; echo '<b>URL :</b> <input type="text" value="http://www.monsite.com/fichiers/'.$time.'_'.$_FILES['fichier']['name'].'" size=38><br />';
echo '<hr />';
echo '<img src="http://www.monsite.com/fichiers/'.$time.'_'.$_FILES['fichier']['name'].'" /><br />';
}
else
{
// Sinon on affiche une erreur système
echo '<b>Problème lors de l\'upload !</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br/><br />';
}
}
else
{
// Sinon on affiche une erreur pour les dimensions et taille de l'image echo '<b>Veuillez saisir une image d\'une taille inférieur à 1024*768</b><br /><br />';
}
}
else
{
// Sinon on affiche une erreur pour l'extension
echo '<b>Votre image ne comporte pas l\'extension .gif , .png ou .jpg!</b><br /><br />';
}
}
else
{
// Sinon on affiche une erreur pour le champ vide
echo '<b>Le champ du formulaire est vide !</b><br /><br />';
}
}

Maintenant un bilan qui présente le contenu du fichier "upload.php" :


//------------------------------------
// Script réalisé par Samir.Paul.Ouahhabi
// Le 08/9/2007
// Licence GNU/GPL
// http://formation-php.blogspot.com/
// ideetek@gmail.com
//-------------------------------------

//----------------------------

// DEFINITION DES VARIABLES
//----------------------------

$target = 'fichiers/'; // Repertoire cible
$extension = 'gif';
// Extension 1 permise du fichier sans le .
$extension2 = 'png'; // Extension 2 permise du fichier sans le .
$extension3 = 'jpg'; // Extension 3 permise du fichier sans le .
$max_size = 250000; // Taille max en octets du fichier
$width_max = 1024; // Largeur max de l'image en pixels
$height_max = 768; // Hauteur max de l'image en pixels

//---------------------------------------------
// DEFINITION DES VARIABLES LIEES AU FICHIER
//---------------------------------------------

$time = time();
$nom_file = $_FILES['fichier']['name'];
$tmp = $_FILES['fichier']['tmp_name'];

//----------------------
// FORMULAIRE D'UPLOAD
//----------------------


?>

<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="hidden" name="posted" value="1" />
//pour permettre de vérifier qu'une requête vient d'être transmise par le formulaire
<input name="fichier" type="file" /><br />
<input type="submit" value="Uploader" />
</form>

<?php

//----------------------

// SCRIPT D'UPLOAD
//----------------------

if(!empty($_POST['posted']))
{
// On vérifie si le champ est rempli
if(!empty($_FILES['fichier']['name']))
{
// On vérifie l'extension du fichier
if(substr($nom_file, -3) == $extension OR substr($nom_file, -3) == $extension2 OR substr($nom_file, -3) == $extension3)
{
// On récupère les dimensions du fichier
$infos_img = getimagesize($_FILES['fichier']['tmp_name']);

// On vérifie les dimensions et taille de l'image
if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fichier']['size'] <= $max_size))
{
// Si c'est OK, on teste l'upload

if (move_uploaded_file ($_FILES['fichier']['tmp_name'] , $target.$time.'_'.$_FILES['fichier']['name'] ) )
{
// Si upload OK alors on affiche le message de réussite
echo '<b>Image uploadée avec succès !</b>';
echo '<hr />';
echo '<b>Fichier :</b> ',$time,'_',$_FILES['fichier']['name'], '<br />';
echo '<b>Taille :</b> ', $_FILES['fichier']['size'], ' Octets<br />';
echo '<b>Largeur :</b> ', $infos_img[0], ' px<br />'; echo '<b>Hauteur :</b> ', $infos_img[1], ' px<br />'; echo '<b>URL :</b> <input type="text" value="http://www.monsite.com/fichiers/'.$time.'_'.$_FILES['fichier']['name'].'" size=38><br />';
echo '<hr />';
echo '<img src="http://www.monsite.com/fichiers/'.$time.'_'.$_FILES['fichier']['name'].'" /><br />';
}
else
{
// Sinon on affiche une erreur système
echo '<b>Problème lors de l\'upload !</b><br /><br /><b>', $_FILES['fichier']['error'], '</b><br/><br />';
}
}
else
{
// Sinon on affiche une erreur pour les dimensions et taille de l'image echo '<b>Veuillez saisir une image d\'une taille inférieur à 1024*768</b><br /><br />';
}
}
else
{
// Sinon on affiche une erreur pour l'extension
echo '<b>Votre image ne comporte pas l\'extension .gif , .png ou .jpg!</b><br /><br />';
}
}
else
{
// Sinon on affiche une erreur pour le champ vide
echo '<b>Le champ du formulaire est vide !</b><br /><br />';
}
}
Bon, c'était tout pour cet article =)
Vous pouvez élaborer ce scripts en ajoutant un design et un compteur ...
D'ailleurs c'est ce que j'ai fait ici : DEMO

Enjoy it

PHPaul

6 commentaires:

Visitor a dit…

C'est le blog, le plus moche et le plus null que j'ai jamais vu;)

:))))))

amicalement nasser

PHPaul a dit…

Merci Nasser pour le compliment :P
Tu es toujours aussi chian.. oups je voulais dire toujours aussi sympa -_-'

Anonyme a dit…

Salut !
Script nickel, aucun probleme pour le faire marcher, merci !

Anonyme a dit…

Ah ouais ok le gars qui est sur msn pendant qu'il enregistre un tuto... ptdr

BRUNOT Morgan a dit…

Merci pour le script
Pratique et facile à utiliser.
Bonne continuation !!!!
Oziks

Mohamed a dit…

Merci mille fois man , ton code est trop cool frèro.
Je viens de l'utiliser et ça a marché direct.
Par contre j'aurai voulu savoir comment renommer l'image.

A pluche ma pluche,
Mohamed

CodeS-SourceS :: Derniers codes PHP ajoutés