1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
| <?php
$dossier_destination = '../Destination_Upload/';
$dossier_temporaire = '../Upload_Temp/';
session_start();
ignore_user_abort(true);
header('Content-type: text/html; charset=UTF-8');
require 'UploadAjaxABCIServeur.php';
require 'fctredimimage.php';
$up = new UploadAjaxABCIServeur($dossier_destination, $dossier_temporaire);
$unidid_form = $up->getUniqidForm();
if(!(isset($unidid_form,$_SESSION['UploadAjaxABCI'][$unidid_form]))) $up->exitErreurFichier('Identifiant de formulaire non valide. Rafraîchissez la page');
// S'assure qu'un fichier ou un fragment de fichier est en téléchargement
if($up->getFragment())
{
$extensions_autorisees = array('jpg','jpeg','png');
$nom_fichier_nettoye = $up->getFichierNomNettoye();// on pourrait utiliser le nom original avec la fonction adéquate mais un nom de fichier nettoyé offre une meilleure compatibilité avec tous les serveurs.
$verif_extension = $up->VerifExtensions($nom_fichier_nettoye,$extensions_autorisees);
if($verif_extension == false)
{
$up->exitErreurFichier('Extension du fichier non valide.');
}
// Upload dans le dossier temporaire
$up->Upload();
// Retourne l'adresse du fichier temporaire quand il est complet, sinon false
$fichier_complet = $up->getFichierComplet();
if($fichier_complet != false)
{
/*Si plusieurs redimensionnements on utilise les troisième et quatrième paramètre de la fonction "fctredimimage()"
qui vont copier le fichier redimensionné dans le répertoire de destination et laisser intact le fichier original.
Ci-dessous je crée une fonction qui réalise la redimension et impose le chmod au fichier de destination*/
function Redim($L, $H, $dossier_dest=null, $nom_fichier=null, $dirname, $basename, $extension_fichier)
{
$redim = fctredimimage($L, $H, $dossier_dest, $nom_fichier, $dirname, $basename, $extension_fichier);
if(!$redim)
{
$up->exitErreurFichier("Erreur dans le redimensionnement du fichier.");
}
// On met le chmod si besoin (mini 604 pour une lecture depuis une url externe) au cas où le serveur mette un 600
$destination_fichier = $dossier_dest.$nom_fichier;
if(trim($destination_fichier) != '' && !@chmod($destination_fichier,0604))
{
$up->exitErreurFichier("Echec de la configuration des droits d'accès du fichier.");
}
}
// Informations sur le fichier
$pathinfo = pathinfo($nom_fichier_nettoye);
$extension_fichier = strtolower($pathinfo['extension']);
// rtrim supprime les caractères '-' et '_' qui peuvent avoir éte insérés en fin de nom par la fonction de nettoyage (pour remplacer un espace vide par exemple)
$non_fichier = rtrim($pathinfo['filename'],'-_');
// On utilise l'adresse du fichier temporaire (fichier de travail) pour le passer en paramètre à la fonction de redimensionnement
$basename = basename($fichier_complet);
$dirname = dirname($fichier_complet).'/';
// On défini l'adresse du dossier de destination par rapport au serveur (recommandé)
$dossier_dest_serveur = $up->getAdresseRelative().$dossier_destination;
// nouveau nom du fichier final vignette _mini max L 200 H 200
$nom_fichier_mini = $non_fichier.'_mini.'.$extension_fichier;
// Utilisation de la fonction créée plus haut (redimensionnement + définition du chmod)
Redim(200, 200, $dossier_dest_serveur, $nom_fichier_mini, $dirname, $basename, $extension_fichier);
// On peut faire d'autres redimensionnements sur le même principe excepté pour le dernier redimensionnement
// nouveau nom du fichier final vignette _moyen max L 500 H 400
$nom_fichier_moyen = $non_fichier.'_moyen.'.$extension_fichier;
Redim(500, 400, $dossier_dest_serveur, $nom_fichier_moyen, $dirname, $basename, $extension_fichier);
/* Pour le dernier redimensionnement on utilise le répertoire temporaire comme dossier de destination (si l'on ne souhaite pas sauvegarder le fichier original), ce qui écrase le fichier original et le remplace par le fichier redimensionné. Pour ce faire il suffit de ne pas renseigner les troisième et quatrième paramètres de la fonction "fctredimimage()". */
Redim(1000, 800, '', '', $dirname, $basename, $extension_fichier);
$nom_fichier_max = $non_fichier.'_max.'.$extension_fichier;
// On construit l'adresse du dernier fichier redimensionné pour le passer en paramètre à la fonction "Transfert()"
$destination_fichier = $dossier_dest_serveur.$nom_fichier_max;
// La fonction transfert le fichier temporaire vers son emplacement définitif (retourne true si ok)
$transfert = $up->Transfert($destination_fichier);
// On défini le chmod (si besoin)
if($transfert && !@chmod($destination_fichier,0604))
{
$up->exitErreurFichier("Echec de la configuration des droits d'accès du fichier");
}
// Variante : dernier redimensionnement idem précédent + sauvegarde de l'image originale
/*
$nom_fichier_max = $non_fichier.'_max.'.$extension_fichier;
Redim(1000, 800, $dossier_dest_serveur, $nom_fichier_max, $dirname, $basename, $extension_fichier);
// Sauvegarde du fichier original
$destination_fichier = $dossier_dest_serveur.$non_fichier.'.'.$extension_fichier;
$transfert = $up->Transfert($destination_fichier);
if($transfert && !@chmod($destination_fichier,0604))
{
$up->exitErreurFichier("Echec de la configuration des droits d'accès du fichier");
}
*/
}
}
$up->exitReponseAjax();
?> |
Partager