Alors voilà,
Maintenant que j'ai assez profité de toutes les astuces que fournis ce site, je me suis dit que je pouvais essayer d'aider les autres.
J'ai cherché pendant longtemps un upload bien expliqué, et pour finir je me le suis fait moi-même ;) en cherchant sur le site de php.net. De plus j'ai aussi fait en sorte qu'il redimensionne direct l'image comme désiré.
Dans le zip il y a 2 fichiers d'upload un permettant une miniature qui garde les proportions de l'originale et l'autre qui crée une miniature aux dimension données, déformant l'original.
J'y ai maintenant rajouté un fichier avec formulaire su rla page .php qui permet d'uploader plusieurs fichiers en une fois :D
Etant un programmeur amateur, je vous demanderai de bien vouloir être indulgents.
Source / Exemple :
index.php :
-----------
<html>
<head>
<title>Upload</title>
</head>
<body>
<form method="post" action="upload.php" enctype="multipart/form-data">
<?php
$nbr_champs = 10;
for($nbr=0;$nbr<$nbr_champs;$nbr++){
?>
<?php echo $nbr; ?>. <input type="file" name="fichier_upload_<?php echo $nbr; ?>" id="fichier_upload_<?php echo $nbr; ?>"><br />
<select name="fichier_rotation_<?php echo $nbr; ?>">
<option>Pas de rotation</option>
<option value="90">90° gauche</option>
<option value="270">90° droite</option>
<option value="180">180°</option>
</select>
<br />
<?php
}
?>
<input type="submit" name="Submit" value="Uploader">
<input name="nbr_f" type="hidden" value="<?php echo $nbr_champs; ?>">
</form>
</body>
</html>
upload.php :
---------------------------------------
<?php
// nombre de fichiers à uploader
$nbr_fichiers = $_POST['nbr_f'];
// boucle permettant d'uploader les fichiers un à un
for($nbr=0;$nbr<$nbr_fichiers;$nbr++){
// on récupère les infos du fichier à uploader
$fichier_temp = $_FILES['fichier_upload_'.$nbr]['tmp_name'];
$fichier_nom = $_FILES['fichier_upload_'.$nbr]['name'];
// on défini les dimensions et le type du fichier
list($fichier_larg, $fichier_haut, $fichier_type, $fichier_attr)=getimagesize($fichier_temp);
// infos de contrôle du fichier
$fichier_poids_max = 500000;
$fichier_h_max = 1224;
$fichier_l_max = 1632;
// gestion du copyright
// 0 = pas de copyright
// 1 = ajout d'un copyright sur les images uploadées
// 2 = ajout d'un copyright sur les images uploadées
// mais tout en gardant une copie de l'image originale sans le copy.
$copyright = 2;
$opacite = 100;
// source du logo copyright
// ATTENTION si vous voulez utiliser un logo au format .jpg ou .png aucun soucis
// il suffit de remplacer imagecreatefromgif par imagecreatefromjpeg ou imagecreatefrompng
$copyright_logo = imagecreatefromgif('logo.gif');
// dossier de destination
$fichier_dossier = 'images/';
// extension du fichier
$fichier_ext = substr($fichier_nom,strrpos( $fichier_nom, '.')+1);
// on renomme le fichier
$fichier_date = date("ymdhis");
$fichier_n_nom = $nbr."_".$fichier_date.".".$fichier_ext;
// on vérifie s'il y a bien un fichier à uploader
if (!empty($fichier_temp) && is_uploaded_file($fichier_temp)) {
// on vérifie le poids du fichier
if (filesize($fichier_temp)<$fichier_poids_max) {
// types de fichiers autorises 1=gif / 2=jpg / 3=png
if (($fichier_type===1) || ($fichier_type===2) || ($fichier_type===3)) {
// on vérifie si l'image n'est pas trop grande
if (($fichier_larg<=$fichier_l_max) && ($fichier_haut<=$fichier_h_max)) {
// si le fichier est ok, on l'upload sur le serveur
if (move_uploaded_file($fichier_temp, $fichier_dossier.$fichier_n_nom)) {
// on donne un acces total sur le fichier
chmod ($fichier_dossier.$fichier_n_nom, 0777);
/******************
rotation de l'image
if (!empty($_POST['fichier_rotation_'.$nbr]) && is_numeric($_POST['fichier_rotation_'.$nbr])) {
$degre_rotation = $_POST['fichier_rotation_'.$nbr];
$image = getimagesize($fichier_dossier.$fichier_n_nom);
// création de l'image
if($fichier_type == "1") {
$source = imagecreatefromgif($fichier_dossier.$fichier_n_nom);
}
if($fichier_type == "2") {
$source = imagecreatefromjpeg($fichier_dossier.$fichier_n_nom);
}
if($fichier_type == "3") {
$source = imagecreatefrompng($fichier_dossier.$fichier_n_nom);
}
//rotation de l'image
$rotation = imagerotate($source,$degre_rotation,1);
//Le -1 permet de remplir les zones vides avec du transparent
// sauvegarde de l'image finale
if($fichier_type == "1") {
imagegif($rotation,$fichier_dossier.$fichier_n_nom);
}
if($fichier_type == "2") {
imagejpeg($rotation,$fichier_dossier.$fichier_n_nom);
}
if($fichier_type == "3") {
imagepng($rotation,$fichier_dossier.$fichier_n_nom);
}
if (($degre_rotation == '90') || ($degre_rotation == '270')) {
$n_larg = $fichier_haut;
$n_haut = $fichier_larg;
$fichier_larg = $n_larg;
$fichier_haut = $n_haut;
}
}
/*****************************
ajout d'un copyright sur les photos
if ($copyright == 0) {
// pas d'ajout de copyright
}
elseif ($copyright != 0) {
// source de la photo
if ($fichier_type===1) {
$copyright_photo = imagecreatefromgif($fichier_dossier.$fichier_n_nom);
}
elseif ($fichier_type===2) {
$copyright_photo = imagecreatefromjpeg($fichier_dossier.$fichier_n_nom);
}
else {
$copyright_photo = imagecreatefrompng($fichier_dossier.$fichier_n_nom);
}
// on récupère les dimensions du logo et de la photo
$larg_logo = imagesx($copyright_logo);
$haut_logo = imagesy($copyright_logo);
$larg_photo = imagesx($copyright_photo);
$haut_photo = imagesy($copyright_photo);
// on calcule la position du logo, ici en bas à droite
$poslogo_x = $larg_photo - ($larg_logo + 5);
$poslogo_y = $haut_photo - ($haut_logo + 5);
// on colle le logo au dessus de l'image
imagecopymerge($copyright_photo, $copyright_logo, $poslogo_x, $poslogo_y, 0, 0, $larg_logo, $haut_logo, $opacite);
// si 1, on écrase l'image sans copyright
if ($copyright == 1) {
if ($fichier_type===1) {
imagegif($copyright_photo, $fichier_dossier.$fichier_n_nom);
}
elseif ($fichier_type===2) {
imagejpeg($copyright_photo, $fichier_dossier.$fichier_n_nom);
}
else {
imagepng($copyright_photo, $fichier_dossier.$fichier_n_nom);
}
}
// si 2, on crée une nouvelle image avec le copyright
else {
if ($fichier_type===1) {
imagegif($copyright_photo, $fichier_dossier.'c_'.$fichier_n_nom);
}
elseif ($fichier_type===2) {
imagejpeg($copyright_photo, $fichier_dossier.'c_'.$fichier_n_nom);
}
else {
imagepng($copyright_photo, $fichier_dossier.'c_'.$fichier_n_nom);
}
}
}
/********************
création de la miniature
// dimension maximale largeur et hauteur comprise
$taille_max = 100;
// si le fichier est plus grand que $taille_max on le miniaturise
if (($fichier_larg > $taille_max) || ($fichier_haut > $taille_max)) {
// définition des dimensions
if (($fichier_haut > $taille_max) && ($fichier_haut >> $fichier_larg)) {
$mini_haut = $fichier_haut / ($fichier_larg / $taille_max);
$mini_larg = $taille_max;
}
else {
$mini_haut = $taille_max;
$mini_larg = $fichier_larg / ($fichier_haut / $taille_max);
}
// si le fichier est un .gif
if ($fichier_type === 1){
// definition de l'image dont on va faire une miniature
$fichier_source = imagecreatefromgif($fichier_dossier.$fichier_n_nom);
// on prépare le fichier miniature qui accueillera l'image réduite
$fichier_reduit = imagecreate($mini_larg, $mini_haut);
// fond blanc pour l'image
$fond_blanc = imagecolorallocate($fichier_reduit, 255, 255, 255);
// dimensions x et y à donner au fichier
$fichier_larg_red = imagesx($fichier_reduit);
$fichier_haut_red = imagesy($fichier_reduit);
// on rajoute un mini_ defant le nom du fichier
$nom_fichier_reduit = 'mini_'.$fichier_n_nom;
// on redimensionne l'image de base dans le fichier $fichier_reduit
imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
// on rend transparent le fond blanc
imagecolortransparent($fichier_reduit, $fond_blanc);
// crée le fichier réduit définitif
imagegif($fichier_reduit, $fichier_dossier.$nom_fichier_reduit);
// on donne un acces total sur le fichier
chmod($fichier_dossier.$nom_fichier_reduit, 0777);
}
// si le fichier est un .jpg / .jpeg
if ($fichier_type===2){
// définition de la qualité
$qualite=80;
// definition de l'image dont on va faire une miniature
$fichier_source = imagecreatefromjpeg($fichier_dossier.$fichier_n_nom);
// on prépare le fichier miniature qui accueillera l'image réduite
$fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut);
// dimensions x et y à donner au fichier
$fichier_larg_red = imagesx($fichier_reduit);
$fichier_haut_red = imagesy($fichier_reduit);
// on rajoute un mini_ defant le nom du fichier
$nom_fichier_reduit = 'mini_'.$fichier_n_nom;
// on redimensionne l'image de base dans le fichier $fichier_reduit
imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
// crée le fichier réduit définitif
imagejpeg($fichier_reduit, $fichier_dossier.$nom_fichier_reduit, $qualite);
// on donne un acces total sur le fichier
chmod($fichier_dossier.$nom_fichier_reduit, 0777);
}
// si le fichier est un .png
if ($fichier_type===3){
// definition de l'image dont on va faire une miniature
$fichier_source = imagecreatefrompng($fichier_dossier.$fichier_n_nom);
// on prépare le fichier miniature qui accueillera l'image réduite
$fichier_reduit = imagecreatetruecolor($mini_larg, $mini_haut);
// dimensions x et y à donner au fichier
$fichier_larg_red = imagesx($fichier_reduit);
$fichier_haut_red = imagesy($fichier_reduit);
// on rajoute un mini_ defant le nom du fichier
$nom_fichier_reduit = 'mini_'.$fichier_n_nom;
// on redimensionne l'image de base dans le fichier $fichier_reduit
imagecopyresampled($fichier_reduit, $fichier_source, 0, 0, 0, 0, $fichier_larg_red, $fichier_haut_red, $fichier_larg, $fichier_haut);
// crée le fichier réduit définitif
imagepng($fichier_reduit, $fichier_dossier.$nom_fichier_reduit);
// on donne un acces total sur le fichier
chmod($fichier_dossier.$nom_fichier_reduit, 0777);
}
// si le fichier est plus petit que $taille_max pas besoin de le miniaturiser
}
else {
$nom_fichier_reduit = $fichier_n_nom;
}
/*************************************
enregistrement dans la base de données
nom du fichier non réduit :
----------------------------------
$fichier_n_nom
nom du fichier réduit :
----------------------------------
$nom_fichier_reduit
echo "Le fichier n°".$nbr." a été uploadé avec succès<br />";
}
else {
echo "Le fichier n°".$nbr." n'a pas pu être uploadé<br />";
}
}
else {
echo "Le fichier n°".$nbr." est trop grand<br />";
}
}
else {
echo "Le fichier n°".$nbr." n'a pas le bon format<br />";
}
}
else {
echo "Le fichier n°".$nbr." est trop lourd<br />";
}
}
else {
echo "Pas de fichier à uploader dans le champ n°".$nbr."<br />";
}
}
?>
Conclusion :
J'ai réussi à modifier de façon à pouvoir uploader plusieurs fichiers, comme on dit, quand on cherche on trouve :D
Good bye all, et merci.
16 mai 2011 à 03:46
Warning: getimagesize() [function.getimagesize]: Filename cannot be empty in /home/........./upload_mini_proportionnee_rotation.php on line 13
Pas de fichier à uploader dans le champ n°1
Quelqu'un sais comment regler cela?
8 août 2010 à 12:06
Salut,
pour enregistrer plusieurs photos uploadées, tu dois mettre ta requête dans la boucle, là ou j'ai noté l'emplacement. Les images sont uploadées les unes après les autres, ce qui fait que tu ne peux pas les enregistrer comme sur ta requête. Chaque image sera un nouvel enregistrement dans ta base de données.
@ DIDINE1975 :
Merci pour le commentaire, pour ce qui est de ta solution, je ne l'ai pas testé et pas eu le temps de chercher la solution, mais merci de le proposer aux autres ;)
@ Vickilux :
Je ne comprend pas vraiment ton but. Le script tourne le nombre de fois qu'il y a de photos, donc si tu effectues une vérification des champs avant d'envoyer au script d'upload, tu peux définir le nombre juste de fois ou le script s'exécutera. C'est le champ caché "> qui renseigne le script d'upload concernant le nombre de boucle à effectuer.
Pour ce qui est du fichier .png, il faut que je regarde. J'ai aussi des soucis concernant les .gif transparents.
16 juil. 2010 à 23:06
avant tout merci pour ce script, les commentaires toutes au long du code et le suivi.
je viens de le mettre en place et tout comme MOON22, j'ai voulu conserver le nom d'origine des images, j'ai également vu apparaitre une double extension, j'ai juste retiré l'ajout de l'extension, puisqu'elle est déjà récupérée avec le nom de l'image (je suis super novice en php, donc je ne garantie pas la solution, mais personnellement ça ne m'a généré aucune erreur, et ça n'a pas l'air d'avoir d'incidence ailleurs)
à la ligne:
$fichier_n_nom = $nbr."_".$fichier_date."_".$fichier_nom.".".$fichier_ext;
j'enlève l'ajout de l'extension, ce qui donne :
$fichier_n_nom = $nbr."_".$fichier_date."_".$fichier_nom;
Voilà si ça peut aider quelqu'un...
et encore RESPECTS pour l'auteur.
Audrey
11 mars 2010 à 16:38
merci ce script est génial.
Par contre je me heurte à l'enregistrement des images dans ma BDD.
Je n'arrive pas a comprendre comment enregistrer plus d'une image dans une BDD
J'ai compris que le nom que prend l'image uploadée est définie par la variable '$fichier_n_nom'
voici ma requete:
$query = "INSERT INTO $table VALUES ('', '$nom', '$prenom','$fichier_n_nom','là l'image 2,'là l'image 3)";
c'est précisément l'image 2 et l'image 3que je n'arrive pas a recuperé.
Quelqu'un sait-il ?
merci
30 janv. 2010 à 00:37
J’ai une image au format logo.png avec fond transparent que je voudrais utiliser pour le copyright de la photo, mais quand la photo est créé, alors le logo.png qui est coller dessus est devenu opaque, cependant je voudrais garder la transparence ! Si quelqu’un peut m’aider merci beaucoup !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.