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 122
| <?php
/*UploadAjaxABCI_Php_Load_Redimensions.php Version 2.6
require 'UploadAjaxABCIServeur.php' et 'fctredimimage.php';
// Exemple de script php d'upload avec redimensionnement d'images. Voir "UploadAjaxABCI_Php_Load_Redimensions.php" pour plus de commentaires.
/* Ce script utilise la même fonction de redimensionnement que le script "UploadAjaxABCI_Php_Load_Redimensions.php".
Cependant, si l'on fait plusieurs redimensionnements successifs, on a intérêt de faire le redimensionnement de plus grande dimension en premier puis d'utiliser ce fichier pour faire les redimensionnements suivants en plus petites dimensions. Il n'y a pas de différence qualitative visuellement par contre le fait de travailler sur une image déjà réduite par rapport à l'original permet aux redimensionnements suivants d'utiliser beaucoup moins de ressources serveur. Le gain est très sensible et proportionnel à la résolution de l'image originale et au nombre de redimensionnements successifs.
*/
// Vous devez vérifier l'existence de ces dossiers ou changer ces adresses
/*------------------------------------------------------*/
$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';
$up = new UploadAjaxABCIServeur($dossier_destination, $dossier_temporaire);
$tab_erreurs = array();
$tab_erreurs['Allowed memory size'] = "Mémoire insuffisante, le fichier est trop gros pour être redimensionné.";
$tab_erreurs['Maximum execution time'] = "Le temps d'exécution maximum du script est dépassé.";
$up->cathErreurServeur($tab_erreurs);
$unidid_form = $up->getUniqidForm();
if(!(isset($unidid_form,$_SESSION['UploadAjaxABCI'][$unidid_form]))) $up->exitErreurFichier("Connexion non valide ou perdue. Rafraîchissez la page et recharger votre fichier, si celui-ci dispose d'une sauvegarde automatique elle sera utilisée.");
// 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();
$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)
{
require 'fctredimimage.php';
/*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, $up)
{
$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 0604 pour une lecture depuis une url externe) au cas où le serveur mette un 0600
$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']);
$non_fichier = $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;
/* On fait le plus grand redimensionnement en premier dans le répertoire temporaire en modifiant la source. Les redimensionnements suivants utiliseront cette image redimensionnée et donc moins de ressources serveur par rapport à l'image originale. Il faut bien entendu que les redimensionnments suivants soient de dimensions inférieures.*/
Redim(1000, 800, '', '', $dirname, $basename, $extension_fichier, $up);
// On construit l'adresse du premier fichier redimensionné pour le passer en paramètre à la fonction "Transfert()"
$nom_fichier_max = $non_fichier.'_max.'.$extension_fichier;
$destination_fichier = $dossier_dest_serveur.$nom_fichier_max;
// Redimesionnements suivants en utilisant le premier comme source et en copiant le résultat dans le répertoire de destination (ne modifie pas la source)
$nom_fichier_mini = $non_fichier.'_mini.'.$extension_fichier;
Redim(200, 200, $dossier_dest_serveur, $nom_fichier_mini, $dirname, $basename, $extension_fichier, $up);
// On peut faire d'autres redimensionnements sur le même principe tant qu'on ne dépasse pas la résolution du plus grand redimensionnement fait en premier (1000x800 dans cet exemple)
$nom_fichier_moyen = $non_fichier.'_moyen.'.$extension_fichier;
Redim(500, 400, $dossier_dest_serveur, $nom_fichier_moyen, $dirname, $basename, $extension_fichier, $up);
// 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");
}
}
}
$up->exitReponseAjax();
?> |
Partager