|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 242 ![]() |
Bonjour,
Cette classe d'upload et redimensionnement est conçue pour offrir de multiples possibilités pour une configuration minimale. Compatible php >= 5.1 Fonctions principales (options) : - Contrôle des extensions. - Renomme un fichier (mode incrémental ou suffixe unique) si un fichier de même nom se trouve sur le serveur. - Choix du nom du fichier de destination (compatible avec la fonctionnalité précédente). - Redimensionnement multiple (ou unique) en sauvegardant ou non l'image originale. - Gestion des erreurs. - Retour messages d'informations pour le visiteur (paramétrable). - Retour tableau de résultat pour enregistrement en bdd. Exemples : Pour télécharger des fichiers de types "pdf" ou "txt" dans un répertoire "Documents", si votre champ de formulaire de type file se nomme "doc" et une variable $_POST témoin d'envoi du formulaire se nomme "form1", il suffit d'écrire : Citation:
Code :
Pour télécharger des images de type gif, png, jpg, jpeg, avec vérification des images, dans le répertoire "Documents" Citation:
Pour redimensionner des images de type gif, png, jpg, jpeg, en maximum 600 de largeur et 500 pixels de hauteur et les télécharger dans le répertoire "Documents" Citation:
En complément, - Vous pouvez renommer automatiquement les fichiers en téléchargement s'il existe un fichier de nom identique dans le répertoire de destination, ou faire un simple contrôle anti écrasement. - Faire plusieurs redimensionnements par image et les enregistrer dans des répertoire différents, et sauvegarder ou non l'image originale. - Imposer un nom de fichier comme nom de destination. - Faire afficher les messages de résultats pour le visiteur. - Obtenir un tableau de résultat pour faciliter l'enregistrement des résultats dans une bdd. Etc. Citation:
Debug - Si aucun fichier n'est téléchargé et qu'aucun message ne s'affiche après l'envoi d'un fichier (dans le cas où vous faites afficher les messages d'information comme dans l'exemple contenu dans mon second message), un ou plusieurs paramètres passés dans la déclaration de la classe sont erronés ou les variables de session ne fonctionnent pas sur votre serveur. - Si le message "Le total maximum du post autorisé par le serveur est dépassé" s'affiche même pour un fichier de faible poids, le nom de l'input d'identification du formulaire passé en deuxième paramètre lors de l'initialisation de la classe est erroné. Classe en pièce jointe :
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||||||
|
|
10
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 242 ![]() |
Exemples complets d'utilisation.
Pour fonctionner sans modification cela suppose que vous ayez des répertoires PHOTO, PHOTO_GF, PHOTO_PF et PDF situés à la racine du site. Par ailleurs la classe doit être enregistrée dans un fichier nommé "Classe_Upload.php" situé dans le même répertoire que ce script ( puisque l'on fait en première ligne : require('Classe_Upload.php'); ) Rappel : Le répertoire de destination doit être indiqué par rapport à la racine www. Si vous testez en local avec plusieurs sites installés sur la racine du serveur d'évaluation (dans le répertoire www) vous devrez indiquer pour un chemin de répertoire valide : "nom_du_site/nom_du_repertoire" et pour un fonctionnement sur le serveur distant, simplement : "nom_du_repertoire" L'avantage de cette configuration est que vous pouvez appeler ce script depuis n'importe quel endroit de votre site sans avoir à modifier le chemin des répertoires de destination. Note : ne soyez pas impressionné par la longueur du code de l'exemple ci-dessous. D'une part cet exemple comprend plusieurs formulaires dans une même page et d'autre part le code est très documenté Vous trouverez dans un prochain message un exemple plus court qui permet par ailleurs de choisir un dossier de destination depuis le formulaire. Code :
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
00
|
|
|
#3 | ||
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 242 ![]() |
Pour compléter mon second message, un autre exemple qui permet de choisir un dossier de destination depuis le formulaire, tout en permettant la gestion complète des erreurs, notamment le dépassement du post maximum autorisé par le serveur (post_max_size).
Code :
En effet si la valeur post_max_size autorisée par le serveur est dépassée, aucun $_POST ne sera retourné par le serveur. Si l'on conditionnait l'instanciation de la classe à l'envoi d'une variable $_POST elle ne pourrait donc pas fonctionner ni retourner l'erreur de dépassement. Autre remarque de cet exemple, par défaut on indique un nom de dossier valide ($dossier = $dossiers_autorise[0]; ) pour qu'au chargement de la page, en attente d'un dossier choisi, la classe trouve un nom de dossier valide et ne renvoi pas un message d'erreur de dossier de destination.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 242 ![]() |
Bonjour,
La classe d'upload est compatible avec l'attribut html5 "multiple" qui permet de sélectionner plusieurs fichiers simultanément en maintenant la touche "Ctrl" enfoncée durant la sélection des fichiers. Le paramétrage de la classe est inchangé, tout se situe dans le code html où il suffit d'ajouter l'attribut multiple = "multiple" dans le champ de type file sans oublier de déclarer son nom sous forme d'un tableau (ici name = "photo[]"). Cependant cet attribut "multiple" n'est pas supporté par IE et d'autres navigateurs récents. De plus il ne permet que la sélection multiple de fichiers provenant d'un même répertoire. Une solution "universelle" est donc de proposer l'ajout supplémentaire de champs possédant l'attribut multiple avec une fonction javascript : Code :
Dans l'exemple complet ci-dessus, l'instanciation de la classe indique (en premier argument) le répertoire "PHOTO" comme nom de destination des fichiers. Remplacer ce nom par un nom de dossier valide sur votre site - chemin par rapport au dossier www - sans quoi vous obtiendrez un message d'erreur dès le chargement de la page.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Webmaster Inscription : février 2007 Messages : 261 ![]() |
Hello,
Perso j'aurais fais 2 classes, une pour l'upload et l'autre juste pour les redimentionnements d'images. J'aurais aussi créé un repertoire automatiquement si non existant. J'aurais utilisé une expression régulière pour le cleanage du nom de fichier. Je trouve dommage qu'il n'y ait pas de crop d'images. |
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 242 ![]() |
Citation:
Ta classe se destine plus à des développeurs qui trouveront des outils pour utiliser les fonctions qu'ils souhaitent suivant leurs besoins. Mais cela demande des connaissances sur le sujet, de se plonger dans les fonctions, et plus de travail de configuration. En contre partie il sera assez facile d'ajouter de nouvelles fonctionnalités. Ma classe est conçue comme un module prêt à l'emploi, facilement utilisable aussi bien par les néophytes que par les moins débutants. Comme je le dis en introduction, "elle est conçue pour offrir de multiples possibilités pour une configuration minimale". J'aurais dû ajouter, mais c'était sous entendu, "et des connaissances requises minimales". Il y a donc un travail de documentation et d'automatisation des options beaucoup plus important : configuration identique pour upload simple, ou multiple upload, ou encore upload multiple HTML5 (à partir d'un même champ), gestion complète et détaillée du téléchargement et des erreurs avec retour personnalisable, tableau de résultats avec dimensions pour enregistrement en bdd, nommage et renommage automatique des fichiers de destinations, redimensionnement simple ou multiple ou simple optimisation etc, le tout très facilement paramétrable. En contre partie, du fait des automatismes mis en place, il sera plus difficile d'ajouter des fonctionnalités non existantes. Cette classe ne sait pas tout faire mais elle répond à la plupart des besoins courants d'upload. Et pour les fonctionnalités existantes - toutes documentées - le paramétrage est des plus simple et la mise en place peut être effectué en un minimum de temps A vrai dire je n'y ai pas pensé. La création d'un répertoire relève d'une réflexion sur l'organisation et l'accès des données et ce n'est vraiment l'objet de cette classe. Et puis rien n'empêche d'ajouter les deux ou trois lignes avant l'instanciation de la classe qui permettront de créer si besoin un répertoire. Je donnerai peut être ultérieurement un exemple pour ceux que ça intéresse. Citation:
Oui ça c'est un manque d'intérêt de ma part pour le crop. Je ne vois pas l'intérêt de faire du recadrage à l'aveugle. Faut dire que j'ai un passé de photographe qui me rend très allergique à cette "idée". Pour moi le travail sur une image (correction des couleurs, luminosité, recadrage etc.) est une étape distincte de l'upload. J'ai bien vu quelques exemples sur le net qui permettent un contrôle du recadrage avant le chargement des images mais ils utilisent des modules externes à php... et comme au final l'intérêt est très relatif, je préfère laisser cette classe autonome pour l'ensemble de son fonctionnement.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
||
|
|
00
|
|
|
#7 | |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 209 ![]() |
Bonjour,
Perso je dit chapeau, j'aime bien cette classe elle me permet de faire ce que je souhaite en un minimum de code. C'est très bien pour l'ajout d'avatar a un profil, ou une galerie photos. J'aurais juste une question : Comment redimensionner une même image dans 2 formats différents en les préfixant d'une certaine manière ? j'ai fait ça mais seul la miniature est généré : Citation:
Notice: Undefined index: channels in /xxx/xxx/www/xxx/upload.class.php on line 779 soit la ligne : return array($infos[0], $infos[1], $infos[2], $infos['bits'], $infos['channels']); Une idée ? |
|
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 209 ![]() |
Heuuu question :
Comment faire pour récupérer le nom de l'image créé. En effet j'ai besoin d'enregistrer en base le nom de l'image, mais j'ai n'arrive pas a le récupérer. D'avance merci |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : septembre 2010 Messages : 1 242 ![]() |
Pour ta première question il n'est pas prévu de nommer deux redimensionnements avec des noms différents. Mon idée était de donner le même nom pour les différents redimensionnements afin de préserver la concordance des données et de télécharger les fichiers résultants dans des répertoires différents. Donc sauf à modifier la classe, ce n'est pas possible. Cela dit l'organisation avec des répertoires différents apporte de nombreux avantages...
Pour la notice, bizarre que "channels" ne soit pas retourné mais après rapide vérification je ne crois pas que je m'en sert (pas plus que de $infos['bits'] d'ailleurs) donc si cela n'empêche pas le script de fonctionner, tu peux ignorer. Ou sinon tu peux essayer de le supprimer ce qui donnera la ligne 779 (dans ton exemple) : Code :
return array($infos[0], $infos[1], $infos[2], $infos['bits']); Code :
return array($infos[0], $infos[1], $infos[2]); Pour ta dernière question, pour récupérer le nom de l'image créée tu peux te servir de Get_Tab_upload () en exemple dans mon second message.
__________________
- Réalisations - Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com