Accueil > > > CLASSE PHP5 D'UPLOAD / REDIMENSIONNEMENT D'IMAGE GD
CLASSE PHP5 D'UPLOAD / REDIMENSIONNEMENT D'IMAGE GD
Information sur la source
Description
Je me suis fais cette classe vite fait, et je l'ai trouvé bien pratique alors je la fais tourner. Elle permet d'uploader très facilement des fichiers, et si c'est des images, de les redimensionner à la volée en conservant les proportions.
Source
- <?php
- //
- // Upload Class (janvier 2005)
- // Nordine Ghachi
- // from TanukiDesign
- // http://www.tanukidesign.com
- //
- class Upload {
-
- private $uploadedFileName ;
- private $uploadedFile ;
- private $uploadedFileSize ;
- private $uploadedFileType ;
-
- public function __construct(){ // constructeur
- // je préfère définir mes paramètres d'upload dans la méthode doUpload()
- // comme ça je peux construire mon objet Upload() avant même de recevoir un fichier d'un formulaire
- // et balancer l'upload quand je veux avec cette méthode
- }
-
- // Méthode doUpload()
- // 1er paramètre : nom du champs file du formulaire ;
- // 2ème : chemin de destination sur le serveur ;
- // 3ème : nouveau nom de fichier SANS EXTENSION car on prend celle du fichier d'origine (facultatif) ;
- // 4ème : côté maxi de l'image (90px par défaut) ;
- // 5ème : type attendu (défault : n'importe quel type) ;
- public function doUpload($file_form_name,$uploadPath=".",$newname="",$sizemax=90,$constraint=""){
- // si l'on a pas donné un nouveau nom au fichier, il garde le nom d'origine
- if ($newname=="") {
- $this->uploadedFileName = $_FILES[$file_form_name]["name"] ;
- } else {
- $extent = pathinfo($_FILES[$file_form_name]["name"]) ;
- $extent = $extent["extension"] ;
- $this->uploadedFileName = $newname.".$extent" ;
- }
-
- // récupération du nom temporaire sur le serveur, de la taille du fichier et de son type
- $this->uploadedFile = $_FILES[$file_form_name]["tmp_name"];
- $this->uploadedFileSize = $_FILES[$file_form_name]["size"];
- $this->uploadedFileType = $_FILES[$file_form_name]["type"];
- //on commence par verifier que le dossier d'upload existe
- if (file_exists($uploadPath)) {
- //on verifie que le fichier soit bien uploader pour des questions de securite
- if (is_uploaded_file($this->uploadedFile)) {
- if (!file_exists($uploadPath.$this->uploadedFileName)) { // on vérifie que le fichier n'existe pas déja (sinon, on lui concatène un 1)
- //on appelle la fonction d'upload
- $this->uploadFile($this->uploadedFile, $this->uploadedFileName, $uploadPath, $newname, $sizemax, $this->uploadedFileType, $constraint);
- //pour activer la modification des permissions enlever les deux // devant la ligne suivante
- //chmod ("$uploadPath$uploadedFileName", $permission);
- }else{
- $this->uploadedFileName="1".$this->uploadedFileName;
- $this->uploadFile($this->uploadedFile, $this->uploadedFileName, $uploadPath, $newname, $sizemax, $this->uploadedFileType, $constraint);
- }
- }
- }else{
- print "Erreur: le dossier $uploadPath n'existe pas";
- }
- }
-
- //fonction pour l'upload des fichier, on utilise la fonction copy et on modifie les noms
- private function uploadFile($file, $name, $directory, $newname, $sizemax, $type,$constraint) {
- copy($file, $directory.$name) or die ("Impossible d'uploader le fichier");
-
- $fullpath = $directory.$this->uploadedFileName ; // chemin complet de l'image sur le serveur
-
- // Si c'est un fichier image, on vérifie que c'est bien un fichier image (type MIME)
-
- if ($constraint=="image") {
- if ($type!="image/jpeg" && $type!="image/png" && $type!="image/gif") {
- @unlink($fullpath);
- echo '<script>alert("Ce n\'est pas un fichier image !");</script>' ;
- }
- }
-
- // redimensionnement si c'est un thumb (avatar par exemple)
-
- if ($constraint=="thumb") {
- switch($type){
- case "image/jpeg":
- $function_image_create = "ImageCreateFromJpeg";
- $function_image_new = "ImageJpeg";
- break;
- case "image/png":
- $function_image_create = "ImageCreateFromPng";
- $function_image_new = "ImagePNG";
- break;
- case "image/gif":
- $function_image_create = "ImageCreateFromGif";
- $function_image_new = "ImageGif";
- break;
- default:
- @unlink($fullpath);
- if ($newname=="avatar") {
- echo '<script>alert("Votre avatar n\'est pas un fichier image, vous aurez donc l\'avatar par défaut !\n Vous pouvez toutefois le modifier dans votre profil.");</script>' ;
- } else {
- echo '<script>alert("Ce n\'est pas un fichier image !");</script>' ;
- }
- exit;
- break;
- }
-
- list($width, $height) = getimagesize($fullpath); // on récupère les dimensions de l'image
-
- // si l'un des côté est supérieur à $sizemax, on redimensionne en conservant les proportions
- if ($width>$sizemax || $height>$sizemax) {
-
- $ratio = $height/$width;
- $newheight = ($height > $width) ? $sizemax : $sizemax*$ratio;
- $newwidth = $newheight/$ratio;
-
- $thumb = ImageCreateTrueColor($newwidth,$newheight);
- $source = @$function_image_create($fullpath);
-
- ImageCopyResampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
-
- @$function_image_new($thumb,$fullpath);
- }
- }
- }
-
- public function getName() {
- return $this->uploadedFileName;
- }
-
- }// fin de la classe
-
-
- ?>
<?php
//
// Upload Class (janvier 2005)
// Nordine Ghachi
// from TanukiDesign
// http://www.tanukidesign.com
//
class Upload {
private $uploadedFileName ;
private $uploadedFile ;
private $uploadedFileSize ;
private $uploadedFileType ;
public function __construct(){ // constructeur
// je préfère définir mes paramètres d'upload dans la méthode doUpload()
// comme ça je peux construire mon objet Upload() avant même de recevoir un fichier d'un formulaire
// et balancer l'upload quand je veux avec cette méthode
}
// Méthode doUpload()
// 1er paramètre : nom du champs file du formulaire ;
// 2ème : chemin de destination sur le serveur ;
// 3ème : nouveau nom de fichier SANS EXTENSION car on prend celle du fichier d'origine (facultatif) ;
// 4ème : côté maxi de l'image (90px par défaut) ;
// 5ème : type attendu (défault : n'importe quel type) ;
public function doUpload($file_form_name,$uploadPath=".",$newname="",$sizemax=90,$constraint=""){
// si l'on a pas donné un nouveau nom au fichier, il garde le nom d'origine
if ($newname=="") {
$this->uploadedFileName = $_FILES[$file_form_name]["name"] ;
} else {
$extent = pathinfo($_FILES[$file_form_name]["name"]) ;
$extent = $extent["extension"] ;
$this->uploadedFileName = $newname.".$extent" ;
}
// récupération du nom temporaire sur le serveur, de la taille du fichier et de son type
$this->uploadedFile = $_FILES[$file_form_name]["tmp_name"];
$this->uploadedFileSize = $_FILES[$file_form_name]["size"];
$this->uploadedFileType = $_FILES[$file_form_name]["type"];
//on commence par verifier que le dossier d'upload existe
if (file_exists($uploadPath)) {
//on verifie que le fichier soit bien uploader pour des questions de securite
if (is_uploaded_file($this->uploadedFile)) {
if (!file_exists($uploadPath.$this->uploadedFileName)) { // on vérifie que le fichier n'existe pas déja (sinon, on lui concatène un 1)
//on appelle la fonction d'upload
$this->uploadFile($this->uploadedFile, $this->uploadedFileName, $uploadPath, $newname, $sizemax, $this->uploadedFileType, $constraint);
//pour activer la modification des permissions enlever les deux // devant la ligne suivante
//chmod ("$uploadPath$uploadedFileName", $permission);
}else{
$this->uploadedFileName="1".$this->uploadedFileName;
$this->uploadFile($this->uploadedFile, $this->uploadedFileName, $uploadPath, $newname, $sizemax, $this->uploadedFileType, $constraint);
}
}
}else{
print "Erreur: le dossier $uploadPath n'existe pas";
}
}
//fonction pour l'upload des fichier, on utilise la fonction copy et on modifie les noms
private function uploadFile($file, $name, $directory, $newname, $sizemax, $type,$constraint) {
copy($file, $directory.$name) or die ("Impossible d'uploader le fichier");
$fullpath = $directory.$this->uploadedFileName ; // chemin complet de l'image sur le serveur
// Si c'est un fichier image, on vérifie que c'est bien un fichier image (type MIME)
if ($constraint=="image") {
if ($type!="image/jpeg" && $type!="image/png" && $type!="image/gif") {
@unlink($fullpath);
echo '<script>alert("Ce n\'est pas un fichier image !");</script>' ;
}
}
// redimensionnement si c'est un thumb (avatar par exemple)
if ($constraint=="thumb") {
switch($type){
case "image/jpeg":
$function_image_create = "ImageCreateFromJpeg";
$function_image_new = "ImageJpeg";
break;
case "image/png":
$function_image_create = "ImageCreateFromPng";
$function_image_new = "ImagePNG";
break;
case "image/gif":
$function_image_create = "ImageCreateFromGif";
$function_image_new = "ImageGif";
break;
default:
@unlink($fullpath);
if ($newname=="avatar") {
echo '<script>alert("Votre avatar n\'est pas un fichier image, vous aurez donc l\'avatar par défaut !\n Vous pouvez toutefois le modifier dans votre profil.");</script>' ;
} else {
echo '<script>alert("Ce n\'est pas un fichier image !");</script>' ;
}
exit;
break;
}
list($width, $height) = getimagesize($fullpath); // on récupère les dimensions de l'image
// si l'un des côté est supérieur à $sizemax, on redimensionne en conservant les proportions
if ($width>$sizemax || $height>$sizemax) {
$ratio = $height/$width;
$newheight = ($height > $width) ? $sizemax : $sizemax*$ratio;
$newwidth = $newheight/$ratio;
$thumb = ImageCreateTrueColor($newwidth,$newheight);
$source = @$function_image_create($fullpath);
ImageCopyResampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
@$function_image_new($thumb,$fullpath);
}
}
}
public function getName() {
return $this->uploadedFileName;
}
}// fin de la classe
?>
Conclusion
Je sais, ce n'est pas très bien commenté, mais normalement ça l'est suffisament ! J'ai également une version prenant en charge la librairie imagick, si ça intéresse quelqu'un, écrivez-moi !
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Upload de fichier php [ par paulito47 ]
Je réalise un script php qui génère un formulaire qui permet la collecte des informations nécessaires pour l'ajout d'une photo (titre, description) et
Probleme avec un formulaire d'upload [ par prog2ni ]
Bonjour, Je suis debutant en php. Je vous explique mon probleme : J'ai en place un script d'upload d'image, il fonctionne, associer a ce script, j'in
Problème librairie GD ! [ par kikifrance ]
Salut! Problème. J'ai créé une image avec la librairie GD, j'obtiens l'image en .php. Je teste avec Chrome, Firefox, IE, et Safari (ainsi que sur l
Formulaire avec image___ upload sur le site et raccourci dans la base [ par bidbidon ]
Bonjour, je suis novice en php!!! J'arrive à transferer toutes [u]les données écrites[/u] de mon formulaire sur ma base!!! Mais j'ai ajouter un <inp
redimensionner une photo lrs de l'upload [ par boubeuch1 ]
Bonjour, Je souhaiterais faire en sorte que quelque soit la taille de l'image d'origine, lorsqu'elle est téléchargé sur le serveur, celle-ci est redi
mon script crée mes fichiers dans un endroit inattendu [ par angelimad ]
bonjour tout le monde. mon problème c'est que j'ai un site php hébergé sur un serveur Linux. mon script upload le fichier via le formulaire du client
Problème avec GD & Image_Text [ par BencoAndCo ]
Bonjour, J'utilise EasyPhp 3.0 pr tester mon site web en local mais depuis un certain tps j'essaye de faire un Captcha j'ai telechargé la lib pear c
upload un fichier .txt [ par meusanland ]
bonsoir à tous depuis quelques année je développe différent site web via AS2 et AS3 cependant un client vient de me commander un site en HTML et en C
ffmpeg image bisard [ par manu7930 ]
un script avec ffmpeg qui donne ça quand on lui demande de faire une image : pourquoi ? [color=red]//génération de l image $gd_image = $frame->toG
Détruire une image après sont upload [ par spike911 ]
bonjour, Je me suis créer un petit système d'upload d'imges pour un projet web. Une basse de donnée stock la liste complète des images avec leur noms
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SYSTEME D'AMISYSTEME D'AMI par moza2409
Cliquez pour lire la suite par moza2409
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|