Je met le code de mon script (issu de plusieurs scripts que j'ai adapté mais je ne suis pas un pro !).
Il fonctionne en local mais je ne l'ai pas testé on line.
L'objectif :
- télécharger l'image (plusieurs fichiers possibles),
- tester le fichier (taille extension, ...) : (je n'ai pas mis ces lignes)
- avant de déplacer le fichier, tester sa taille et en réduire la taille et/ou le poids selon sa taille et le déplacer ensuite
- créer la miniature
Mes questions sont :
1) que devient le fichier dans le dossier temporaire ? Est-il détruit automatiquement ? et quand ?
2) je suis novice : comment améliorer le script ?
// Upload si tout est ok
if( $arrImg[$i]['upload'] )
{
$nom_origine = $_FILES['photo']['name'][$i] ;
// formatage nom fichier d'orgine Enlever les accents
$nom_origine = strtr($nom_origine, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
// remplacer les caracteres autres que lettres, chiffres et point par _
$nom_origine = preg_replace('/([^.a-z0-9]+)/i', '_', $nom_origine);
// création d'un nom de fchier théoriquement unique
$nom = uniqid().".".$ext ;
// Taille de l'image dans le dossier temporaire
$size = getimagesize($_FILES['photo']['tmp_name'][$i]);
$hauteur = $size[1];
$largeur = $size[0];
$extension = $size[2];
$hauteur_orig = $size[1]; // pour base de données
$largeur_orig = $size[0]; // pour base de données
if ($largeur > $limite_photo) // on calcule les dimensions de la photos si sa largeur dépasse la limite fixée
{
$hauteur = $hauteur / ($largeur / $limite_photo); // Calcule de la hauteur de la photo réduite
$largeur = $limite_photo;
}
switch ($extension) {
case 1: // GIF
$source = imagecreatefromgif($_FILES['photo']['tmp_name'][$i]); // L'image est la source
break;
case 2: //JPEG
$source = imagecreatefromjpeg($_FILES['photo']['tmp_name'][$i]); // L'image est la source
break;
case 3: // PNG
$source = imagecreatefrompng($_FILES['photo']['tmp_name'][$i]); // L'image est la source
break;
}
$destination = imagecreatetruecolor($largeur, $hauteur); // On crée la miniature vide
// Notez bien que l'on n'est pas obligé de faire ces calculs, car on les a déjà fait. Moi je préfère, pour plus de sureté
$largeur_source = imagesx($source); // Largeur de la source
$hauteur_source = imagesy($source); // Hauteur de la source
$largeur_destination = imagesx($destination); // Largeur de la miniature
$hauteur_destination = imagesy($destination); // Hauteur de la miniature
// Création de la photo réduite
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
switch ($extension) {
case 1: // GIF
$upload = imagegif($destination, $dest_dossier.$nom);
break;
case 2: //JPEG
$upload = imagejpeg($destination, $dest_dossier.$nom);
break;
case 3: // PNG
$upload = imagepng ($destination, $dest_dossier.$nom);
break;
}
//on libere la memoire du serveur
imagedestroy ($destination);
if( $upload ) // si l'upload a réussi, on peut créer la miniature. on prend note de la réussite (message d'info)
{
$arrImg[$i]['message'] = 'L\'image ' . $_FILES['photo']['name'][$i] . ' a été transférée avec succès';
//Création de la miniature
if($hauteur >= $limite_mini OR $largeur >= $limite_mini)
{
switch ($extension) {
case 1: // GIF
$source = imagecreatefromgif($dest_dossier.$nom); // L'image est la source
break;
case 2: //JPEG
$source = imagecreatefromjpeg($dest_dossier.$nom); // L'image est la source
break;
case 3: // PNG
$source = imagecreatefrompng($dest_dossier.$nom); // L'image est la source
break;
}
if($hauteur >= $limite_mini AND $hauteur > $largeur) // Calcule des dimensions miniatures
{ // Si la hauteur est plus grande que la largeur
$largeur = $largeur / ($hauteur / $limite_mini); // Calcule de la largeur miniature
$hauteur = $limite_mini;
}
else
{ // Si la largeur est plus grande que la hauteur
$hauteur = $hauteur / ($largeur / $limite_mini); // Calcule de la hauteur miniature
$largeur = $limite_mini;
}
$destination = imagecreatetruecolor($largeur, $hauteur); // On crée la miniature vide
$largeur_source = imagesx($source); // Largeur de la source
$hauteur_source = imagesy($source); // Hauteur de la source
$largeur_destination = imagesx($destination); // Largeur de la miniature
$hauteur_destination = imagesy($destination); // Hauteur de la miniature
// Notez bien que l'on n'est pas obligé de faire ces calculs, car on les a déjà fait. Moi je préfère, pour plus de sureté
$nomMiniature = 'small_'.$nom; // Nom de la miniature
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source); // Création de la miniature
switch ($extension) {
case 1: // GIF
imagegif($destination, $dest_miniat.$nomMiniature);
break;
case 2: //JPEG
imagejpeg($destination, $dest_miniat.$nomMiniature);
break;
case 3: // PNG
imagepng ($destination, $dest_miniat.$nomMiniature);
break;
//on libere la memoire du serveur
imagedestroy ($destination);
}
} // Fin de création de la miniature
} // Fin de l'upload a marché
else
{
$arrImg[$i]['message'] = 'Un problème est survenu dans la tentative de transfert de l\'image ' . $_FILES['photo']['name'][$i];
exit;
} // FIn de l'uuload s'est plante
} // FIn de on peut commencer l'upload if( $arrImg[$i]['upload'] )
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]