Fonctions d'upload Multiples d'images avec creation de miniatures à la volée
Suite au script proposé d'upload multiple de fichiers,
j'ai ajouté la creation de miniatures à la volée.
Modification du script suivant :
http://cozop.com/koogar/upload_multiple_ou_simple_des_fichiers
j'ai ajouté la creation de miniatures à la volée.
Modification du script suivant :
http://cozop.com/koogar/upload_multiple_ou_simple_des_fichiers
|
|
Code Source
Fonctions du code
: Crée un tableau - (PHP 4, PHP 5)
: - (PHP 4, PHP 5)
: Détermine si une variable est affectée - (PHP 4, PHP 5)
: Retourne le timestamp UNIX actuel - (PHP 4, PHP 5)
: Compte le nombre d'éléments d'un tableau ou le nombre de propriétés...
: Affiche une chaîne de caractères - (PHP 4, PHP 5)
: Coupe une chaîne en segments - (PHP 4, PHP 5)
: Détruit une variable - (PHP 4, PHP 5)
: Rassemble les éléments d'un tableau en une chaîne - (PHP 4, PHP 5)
: Retourne un segment de chaîne - (PHP 4, PHP 5)
: Recherche dans un tableau la clé associée à une valeur - (PHP 4 >= 4.0.5, PHP 5)
: Déplace un fichier téléchargé - (PHP 4 >= 4.0.3, PHP 5)
: Crée une nouvelle image à partir d'un fichier ou d'une URL - (PHP 4, PHP 5)
: Retourne la largeur d'une image - (PHP 4, PHP 5)
: Retourne la hauteur de l'image - (PHP 4, PHP 5)
: Crée une nouvelle image en couleurs vraies - (PHP 4 >= 4.0.6, PHP 5)
: Alloue une couleur pour une image - (PHP 4, PHP 5)
: Remplissage - (PHP 4, PHP 5)
: Copie, redimensionne, rééchantillonne une image - (PHP 4 >= 4.0.6, PHP 5)
: Envoie une image JPEG vers un navigateur ou un fichier - (PHP 4, PHP 5)
: La plus grande valeur - (PHP 4, PHP 5)
: Efface un fichier - (PHP 4, PHP 5)
: Renomme un fichier ou un dossier - (PHP 4, PHP 5, PECL zip:1.1.0-1.4.1)
Commentaires
Salut, ton code est super. Pour ma part je suis constructeur de portails et de tous types d'applicaitons web. Je monte plussieurs fois par mois des app de gestion de fichier et images. Voici quelques trucs importants ici afin de pouvoir rendre le patern plus universel.
Voici donc quelques conseils (au cas où tu voudrais faire les correctifs, sinon je posteai ta source avec améliorations)
elle est cool à la base, très beau job.
ton $upload_dir est vide, alors que tu suggères que le rep "MINI" est dans "images". Faudrait l'indiquer. Indiques plutôt dans une variable en haut ton chemin pour la photo, puis aussi pour les miniatures.
vérifies en premier lieu si ton client à un rep image sur son web ( ce qui est presque toutjours le cas)
Si oui, tu regardes alors si tua s les droits d'écrire sur le rep avec chmod 644.
Sinon, tu devras alors le créer, et lui donner les droits bien sûr.
Donnes les droits chmod 644 sur toutes tes images et minaitures 644, afin d'avoir les droits de supprimer les images via PHP par après. Pas tous les serveurs qui permettent les droits. Ca te donnerait le test pour voir si ton client ne va pas te rapppeler une heure plus tard pour te dire que ton app ne fonctionne pas.
Tu devrais préfixer les miniatures par "t-monimage.jpg" ou "min-monimage.jpg" au lieu de mettre dans un sous rep "MINI". Car ton client peur tout planter en transfèrant ses fichier via ftp par la suite, et copier dans le mauvais répertoire. Aussi, le cache des browser peuvent confondrent entre la vraie photo et la miniature en mémoire car elles portent le même nom.
Tu dois aussi mettre dans ton array le "JPG", "JPEG", et surtout "pjpeg" et "PJPEG" (car ce sont les nouveaux formats de jpeg mais pour l'impresion - soit du 300 dpi) tu dois pouvoir gérer ce format car tu trouveras de bug de dépassement de la mémoire de 32 megs alloués et GD cessera de fonctionner. Le traitement de jpg et de pjpeg sont très duifférents vu leur ppp et dpi.
Donc pas oubleir de mettre tant les extentions en minuscules qu'ne maguscules.
Tu fais appel dans le script de la fonction "clean", où est elle exactement?
Aussi , tu peux tout simplement éviter le clean des expressions en renommant la photo avec le temps actuel par exemple :
(et lui donner les droits 644)
Aussi la syntaxe est déffectueuse ici :
Warning: unlink(images/001109_0552_001.jpg.tmp) [function.unlink]: No such file or directory
cette image semble vouloir avoir deux extentions.......
Bref, regardes si tu veux faire les modifs, ou je mettrais les correctifs.
En gros, il sagit d'une beau job. Faut mettre plus de gestion de débugggage, mais sutout un ti script de test lorsque tu installe sur un client, question de voir où sont tes droits et tout et tout.
Voici donc quelques conseils (au cas où tu voudrais faire les correctifs, sinon je posteai ta source avec améliorations)
elle est cool à la base, très beau job.
ton $upload_dir est vide, alors que tu suggères que le rep "MINI" est dans "images". Faudrait l'indiquer. Indiques plutôt dans une variable en haut ton chemin pour la photo, puis aussi pour les miniatures.
| Code: |
$chemin_images ="images/"; $chemin_thumbs = $chemin_image."thumbs"; |
vérifies en premier lieu si ton client à un rep image sur son web ( ce qui est presque toutjours le cas)
Si oui, tu regardes alors si tua s les droits d'écrire sur le rep avec chmod 644.
Sinon, tu devras alors le créer, et lui donner les droits bien sûr.
Donnes les droits chmod 644 sur toutes tes images et minaitures 644, afin d'avoir les droits de supprimer les images via PHP par après. Pas tous les serveurs qui permettent les droits. Ca te donnerait le test pour voir si ton client ne va pas te rapppeler une heure plus tard pour te dire que ton app ne fonctionne pas.
Tu devrais préfixer les miniatures par "t-monimage.jpg" ou "min-monimage.jpg" au lieu de mettre dans un sous rep "MINI". Car ton client peur tout planter en transfèrant ses fichier via ftp par la suite, et copier dans le mauvais répertoire. Aussi, le cache des browser peuvent confondrent entre la vraie photo et la miniature en mémoire car elles portent le même nom.
Tu dois aussi mettre dans ton array le "JPG", "JPEG", et surtout "pjpeg" et "PJPEG" (car ce sont les nouveaux formats de jpeg mais pour l'impresion - soit du 300 dpi) tu dois pouvoir gérer ce format car tu trouveras de bug de dépassement de la mémoire de 32 megs alloués et GD cessera de fonctionner. Le traitement de jpg et de pjpeg sont très duifférents vu leur ppp et dpi.
Donc pas oubleir de mettre tant les extentions en minuscules qu'ne maguscules.
Tu fais appel dans le script de la fonction "clean", où est elle exactement?
Aussi , tu peux tout simplement éviter le clean des expressions en renommant la photo avec le temps actuel par exemple :
| Code: |
$new_nom = date("ymd").time().".jpg"; |
(et lui donner les droits 644)
Aussi la syntaxe est déffectueuse ici :
Warning: unlink(images/001109_0552_001.jpg.tmp) [function.unlink]: No such file or directory
cette image semble vouloir avoir deux extentions.......
Bref, regardes si tu veux faire les modifs, ou je mettrais les correctifs.
En gros, il sagit d'une beau job. Faut mettre plus de gestion de débugggage, mais sutout un ti script de test lorsque tu installe sur un client, question de voir où sont tes droits et tout et tout.
Aussi, ....en passant, une bonne méthode...pour ma part, est de toujours m'envoyer moi-même un courriel lorsque ca plante sur un client avec le code d'erreur, je stock ca dans ma bd distante pour consultation. Ainsi, le client m'appelle, et je suis déja en train de débugger son application.
Car j'en vend des cms et des galeries. Je dois m'assurer du fonctionnement parfait.
Car par exemple, il y a des moments où c'est pas évident. Car un site peut, question de transfère de serveur, perdre ses droits, erreures de transfères ou de pertes de connexion avec le serveur. Ca cause des troubles pas possibles. J'ai plus d'une centaine de clients avec des dispositifs ayant à faire appel aux uploads et gestions de fichiers. Une seule mise à jour de plateforme et tout peux planter. Je peux dès lors avec des courriel d'alerte voir à mon grain.....sans y mettre trop de blé. La version de GD sur le serveur est très importante, surtout avec les nouveaux formats de jpg à 300 dpi par défaut, le 32 megs de mémoire du serveur est insuffisant. Les codeurs devront bientôt jeter un oeil sur ca. Un véritable casse-tête est à venir pour des milleirs de codeurs, et je n'exagère pas du tout.
J'aime bien ta facon de coder, donnes moi plus de détails sur tes codes, j'y jetterai un coup d'oeil.
Bon travail.
Car j'en vend des cms et des galeries. Je dois m'assurer du fonctionnement parfait.
Car par exemple, il y a des moments où c'est pas évident. Car un site peut, question de transfère de serveur, perdre ses droits, erreures de transfères ou de pertes de connexion avec le serveur. Ca cause des troubles pas possibles. J'ai plus d'une centaine de clients avec des dispositifs ayant à faire appel aux uploads et gestions de fichiers. Une seule mise à jour de plateforme et tout peux planter. Je peux dès lors avec des courriel d'alerte voir à mon grain.....sans y mettre trop de blé. La version de GD sur le serveur est très importante, surtout avec les nouveaux formats de jpg à 300 dpi par défaut, le 32 megs de mémoire du serveur est insuffisant. Les codeurs devront bientôt jeter un oeil sur ca. Un véritable casse-tête est à venir pour des milleirs de codeurs, et je n'exagère pas du tout.
J'aime bien ta facon de coder, donnes moi plus de détails sur tes codes, j'y jetterai un coup d'oeil.
Bon travail.
Merci pour ces informations pertinentes. C'est vrai que la gestion des noms de fichier et leur extension est fondamentale. Je reviendrai sur ce code dès que j'aurai une minute, si tu souhaites contribuer à ce code par une nouvelle publication de celui-ci, n'hésites pas.
Il est vrai qu'on peut optimiser en début de code les variables de configuration pour plus de souplesse.
En ce qui concerne la fonction Clean la voici, elle sert à nettoyer les noms de fichiers et dossiers d'origine (j'ai remplacé un compact preg_replace par un fastidieux stripslashes(str_replace()) car certains hébergeurs tels que OVH n'avait pas l'air de tolérer la fonction preg_replace :
Il est vrai qu'on peut optimiser en début de code les variables de configuration pour plus de souplesse.
En ce qui concerne la fonction Clean la voici, elle sert à nettoyer les noms de fichiers et dossiers d'origine (j'ai remplacé un compact preg_replace par un fastidieux stripslashes(str_replace()) car certains hébergeurs tels que OVH n'avait pas l'air de tolérer la fonction preg_replace :
| Code: |
| function clean($texte) { $texte = html_entity_decode($texte); // ### MARCHE PAS AVEC OVH ### // Définition des caractères accentués $car_speciaux = array( ‘À’, ‘Á’, ‘Â’, ‘Ã’, ‘Ä’, ‘Å’, ‘Æ’, ‘à’, ‘á’, ‘â’, ‘ã’, ‘ä’, ‘å’, ‘æ’, ‘È’, ‘É’, ‘Ê’, ‘Ë’, ‘è’, ‘é’, ‘ê’, ‘ë’, ‘Ì’, ‘Í’, ‘Î’, ‘Ï’, ‘ì’, ‘í’, ‘î’, ‘ï’, ‘Ò’, ‘Ó’, ‘Ô’, ‘Õ’, ‘Ö’, ‘Ø’, ‘ò’, ‘ó’, ‘ô’, ‘õ’, ‘ö’, ‘ø’, ‘Ù’, ‘Ú’, ‘Û’, ‘Ü’, ‘ù’, ‘ú’, ‘û’, ‘ü’, ‘ß’, ‘Ç’, ‘ç’, ‘Ð’, ‘ð’, ‘Ñ’, ‘ñ’, ‘Þ’, ‘þ’, ‘Ý’, ‘€’ ); // … et de leurs “équivalents” non-accentués $car_normaux = array( ‘A’, ‘A’, ‘A’, ‘A’, ‘A’, ‘A’, ‘A’, ‘a’, ‘a’, ‘a’, ‘a’, ‘a’, ‘a’, ‘a’, ‘E’, ‘E’, ‘E’, ‘E’, ‘e’, ‘e’, ‘e’, ‘e’, ‘I’, ‘I’, ‘I’, ‘I’, ‘i’, ‘i’, ‘i’, ‘i’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘O’, ‘o’, ‘o’, ‘o’, ‘o’, ‘o’, ‘o’, ‘U’, ‘U’, ‘U’, ‘U’, ‘u’, ‘u’, ‘u’, ‘u’, ‘B’, ‘C’, ‘c’, ‘D’, ‘d’, ‘N’, ‘n’, ‘P’, ‘p’, ‘Y’, ‘E’ ); // On commence par supprimer les accents //$texte = stripslashes(str_replace($car_speciaux, $car_normaux, $texte)); $texte = stripslashes(str_replace('é','e',$texte)); $texte = stripslashes(str_replace('è','e',$texte)); $texte = stripslashes(str_replace('ê','e',$texte)); $texte = stripslashes(str_replace('ë','e',$texte)); $texte = stripslashes(str_replace('à','a',$texte)); $texte = stripslashes(str_replace('â','a',$texte)); $texte = stripslashes(str_replace('@','a',$texte)); $texte = stripslashes(str_replace('ù','u',$texte)); $texte = stripslashes(str_replace('/','',$texte)); $texte = stripslashes(str_replace('"','',$texte)); $texte = stripslashes(str_replace('#','',$texte)); $texte = stripslashes(str_replace('*','',$texte)); $texte = stripslashes(str_replace('[','',$texte)); $texte = stripslashes(str_replace(']','',$texte)); $texte = stripslashes(str_replace('(','',$texte)); $texte = stripslashes(str_replace(')','',$texte)); $texte = stripslashes(str_replace(':','',$texte)); $texte = stripslashes(str_replace(';','',$texte)); $texte = stripslashes(str_replace(',','',$texte)); $texte = stripslashes(str_replace('|','',$texte)); $texte = stripslashes(str_replace('^','',$texte)); $texte = stripslashes(str_replace('!','',$texte)); $texte = stripslashes(str_replace('?','',$texte)); $texte = stripslashes(str_replace('&','et',$texte)); $texte = stripslashes(str_replace('¤','',$texte)); $texte = stripslashes(str_replace('°','',$texte)); $texte = stripslashes(str_replace('#','',$texte)); $texte = stripslashes(str_replace('"','',$texte)); $texte = stripslashes(str_replace('$','',$texte)); $texte = stripslashes(str_replace('+','',$texte)); $texte = stripslashes(str_replace('=','-',$texte)); $texte = stripslashes(str_replace('%','',$texte)); $texte = stripslashes(str_replace('€','Euros',$texte)); //On retire les espaces $texte = stripslashes(str_replace(' ','',$texte)); // On remplace les caractères non-alphanumériques par le séparateur // ### MARCHE PAS AVEC OVH ### //$texte = preg_replace( “/[^A-Za-z0-9]+/”, “-”, $texte ); // On supprime le séparateur s’il se trouve en début ou fin de chaîne $texte = trim( $texte, “-”); // On limite la chaine à $max_caracteres caractères (ici 50 caractères) $texte = substr( $texte, 0, 50 ); // On convertit le tout en minuscules $texte = strtolower($texte); // On retourne le résultat return ($texte); }; |
Ajouter un commentaire
Librairie PHP
Connexion
Fonctions
PHP
- Affichage (5)
- Applications (9)
- Chaînes (71)
- Classes (29)
- Constantes (4)
- Cookies (3)
- Date-Heure (40)
- Email (14)
- Fichiers - Réps (45)
- Fonctions (23)
- Formulaires (18)
- GD-Graphiques (11)
- Google (13)
- HTML (7)
- Images (21)
- Inclassable (28)
- Maths (24)
- MySQL (23)
- Navigateurs (6)
- Recherches (6)
- Regex (13)
- Reseau (2)
- Sécurité (25)
- Sessions (13)
- Statistiques (5)
- Système (18)
- Tableaux (21)
- Tag-cloud (3)
- Templates (3)
- Twitter (5)
- URL (22)
- Variables (8)
- Vidéos (2)
- Windows (1)
- XML (2)
























