IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Classe d'Upload et Redimensionnement


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut Classe d'Upload et Redimensionnement
    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 :

    $up = new Telechargement('Documents','form1','doc');

    $extensions = array('pdf','txt');

    $up->Set_Extensions_accepte ($extensions);

    $up->Upload('reload');
    Ainsi, en considérant que vous avez enregistré la classe dans un fichier nommé "Classe_Upload.php", le code ci-dessous est déjà parfaitement fonctionnel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php require('Classe_Upload.php');
     
    $up = new Telechargement('Documents','form1','doc');
     
    $extensions = array('pdf','txt');
    $up->Set_Extensions_accepte ($extensions);
     
    $up->Upload('reload');
    ?>
    <form enctype = "multipart/form-data" action = "#" method = "post">	  
    <input name = "doc" type = "file" size = "70" />				 
    <input type = "submit" name = "form1" value = "Envoyez"  />	
    </form>
    Pour télécharger des images de type gif, png, jpg, jpeg, avec vérification des images, dans le répertoire "Documents"

    $up = new Telechargement('Documents','form1','doc');

    $up->Set_Controle_dimImg ();

    $up->Upload('reload');
    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"

    $up = new Telechargement('Documents','form1','doc');

    $up->Set_Redim ('600','500');

    $up->Upload('reload');
    Voilà pour les configurations de base (d'autres exemples d'utilisation sont donnés dans mes messages suivants).

    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.

    Code et mode d'emploi détaillé ici.
    Exemples d'utilisation dans les messages suivants.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    <?php
    require('Classe_Upload.php');
     
    /*EXEMPLE
    Paramétrage en fonction des deux formulaires de téléchargement intégrés dans le code source.
    Pour un fonctionnement sans modification des paramètres, suppose les répertoires PHOTO, PHOTO_GF, PHOTO_PF  et PDF situés à la racine du site.*/
     
     
     
    // FORMULAIRE 1
     
    // Téléchargement de photos avec contrôle anti-écrasement d'un fichier déjà existant, et contrôle des images
     
    // Déclaration de la classe avec envoi des paramètres
    $form_1 = new Telechargement ('PHOTO','formulaire_1','photo','get_formulaire_1');
     
     
    // Contrôle simple (anti écrasement) de l'existence d'un fichier de nom identique dans le répertoire de destination
    $form_1->Set_Controle_fichier ();
     
    // Contrôle que le fichier est effectivement une image de type gif, jpg, jpeg ou png et retourne ses dimensions dans le tableau des résultats
    $form_1->Set_Controle_dimImg ();
     
     
    //Téléchargement sans traitement php supplémentaire -> on spécifie un rechargement de la page suite au téléchargement en indiquant un argument non nul ex 'reload' dans la fonction d'Upload.
    $form_1->Upload('reload');
     
     
    // Enregistrement des messages de contrôle (si besoin)
    $messages_form1 = $form_1->Get_Tab_message ();
     
    // Enregistrement du tableau des résultats (si besoin)
    $tranfert_form1 = $form_1->Get_Tab_upload ();
     
     
     
     
    // FORMULAIRE 2
     
    // Téléchargements de fichiers de nature différentes (photos et pdf) dans des répertoires différents avec si besoin renommage des fichiers, puis redimentionnement des images et traitement php.
     
    $form2_photo = new Telechargement('PHOTO','formulaire_2','photo','get_formulaire_2');
     
     
    // Tableau des extensions autorisées (en minuscules). Dans cet exemple, seules les extensions "jpg" et "jpeg" sont autorisées
    $tab_extensions_autorisees = array('jpg','jpeg');
    // Envoi du tableau des extensions autorisées
    $form2_photo->Set_Extensions_accepte($tab_extensions_autorisees);
     
    // Images originales téléchargées dans le répertoire "PHOTO" + mêmes images redimensionnées en max 950 x 800 téléchargées dans le répertoire "PHOTO_GF" + mêmes images redimensionnées en max 200 x 200 téléchargées dans le répertoire "PHOTO_PF"
     
    $form2_photo->Set_Redim ('950','800','PHOTO_GF');
    $form2_photo->Set_Redim ('200','200','PHOTO_PF');
     
    // Contrôle de l'existence d'un fichier de nom identique dans le répertoire de destination et si oui renommage  du fichier téléchargé avec un suffixe aléatoire unique.
    $form2_photo->Set_Renomme_fichier ();
     
     
    // Téléchargement sans reload de la page
    $form2_photo->Upload ();
     
     
     
     
    // Dans le même formulaire un fichier pdf à télécharger dans le répertoire "PDF"
    $form2_pdf = new Telechargement('PDF','formulaire_2','pdf','get_formulaire_2');        
     
     
    // Tableau des extensions autorisées (en minuscules). Dans cet exemple, seules les extensions "pdf" sont autorisées
    $extensions_pdf = array('pdf');
    // Envoi du tableau des extensions autorisées
    $form2_pdf->Set_Extensions_accepte ($extensions_pdf);
     
    // Contrôle de l'existence d'un fichier de nom identique dans le répertoire de destination et si oui renommage du fichier téléchargé avec un suffixe incrémentiel
    $form2_pdf->Set_Renomme_fichier ('incr');
     
     
    // Téléchargement sans reload de la page
    $form2_pdf->Upload ();
     
     
     
    // Le reload de la page sera effectué à la fin du traitement php en utilisant la fonction "Get_Reload_page()"
    if (isset($_POST['formulaire_2']))
            {
     
                    //Récupération des résultats
                    //$transfert_form2_photo = $form2_photo->Get_Tab_upload ();
                    //$transfert_form2_pdf = $form2_pdf->Get_Tab_upload ();
     
                    // Voir la structure du tableau de résultat, et un exemple de récupération en fin de script
     
     
                    //enregistrement des données en bdd etc.
     
                    // Rechargement de la page pour éviter un multiple post en cas de rafraichissement de la page par le visiteur
                    $form2_photo->Get_Reload_page();
            }
     
     
    // A noter que l'appel à la fonction Get_Tab_message() doit se faire APRES la condition "if (isset($_POST..."
    $messages_form2_pdf = $form2_pdf->Get_Tab_message ();
    $messages_form2_photo = $form2_photo->Get_Tab_message ();
     
     
    // Les deux lignes ci-dessous doivent logiquement se trouver à l'intérieur la condition "if (isset($_POST...)" pour servir par exemple à alimenter une bdd. Elles sont ici uniquement pour démonstration et afficher la structure du taleau de résultat en bas de page.
    $transfert_form2_photo = $form2_photo->Get_Tab_upload ();
    $transfert_form2_pdf = $form2_pdf->Get_Tab_upload ();
     
     
    // Vous pouvez éventuellement mettre la déclaration de la classe (et l'appel de ses fonctions) à l'intérieur de la condition "if (isset($_POST...)", cependant vous devrez alors enregistrer le tableau des messages dans une variable de session pour pouvoir y accéder après le reload de la page, et d'autre part le message indiquant un dépassement du $_POST maximum total autorisé par le serveur ne sera plus fonctionnel.
     
     
     
     
    /* Debug
    
    - Si aucun message ne s'affiche après l'envoi d'un fichier, 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 petite taille, le nom de l'input d'identification du formulaire passé en deuxième paramètre lors de l'initialisation de la classe est erroné.
    
    */
     
     
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans titre</title>
    <script type="text/javascript">
    <!--
    function Verif_attente(id_attente)
        {              
            var id_attente = document.getElementById(id_attente);
     
            if (typeof id_attente != 'undefined')
            {
                // Nettoyage de l'élément cible
                var nb_noeuds = id_attente.childNodes.length;
     
                for (var i = 0; i < nb_noeuds; i++)        
                                    {                                  
                                            id_attente.removeChild(id_attente.firstChild);
                                    }
     
                id_attente.style.fontWeight="bold";
                id_attente.style.fontSize="1.5em";
     
                var texte = 'Patientez...';
                // Création du noeud texte
                var noeud_texte = document.createTextNode(texte);
                // Insertion du noeud texte
                id_attente.appendChild(noeud_texte);
            }
        }
    -->
    </script>
    <style type="text/css">
    body {
    font-family: Arial, Helvetica, sans-serif;
    font-size:12px;
    }
     
    p, input, form {
    margin:0;
    padding:0;
    }
    </style>
    </head>
     
    <body>
     
    <div style="width:650px;margin:auto;margin-top:50px;">  
     
            <p>Fichiers photos (png, jpg, jpeg, gif)</p>
     
            <form enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_formulaire_1=1'?>" method = "post" onsubmit = "Verif_attente('message_tele')" id = "formulaire_1">
     
                    <p>      
                            <!-- input d'identification du formulaire qui doit être passé en paramètre dans l'initialisation de la classe-->
                            <input type = "hidden" name = "formulaire_1" value = "1" />
     
                            <!-- Par défaut MAX_FILE_SIZE = Return_Octets(ini_get('upload_max_filesize') donc ne sert à rien en l'état. Pour limiter l'upload à une taille inférieure vous pouvez rentrez une valeur suivie de son unité, exemple $form_1->Return_Octets('500K') pour 500 kilos octets, $form_1->Return_Octets('1M') pour 1 méga octets etc. La fonction "Return_Octets" est employée pour la conversion en octets car le champ MAX_FILE_SIZE demande une valeur en octets. -->
     
                            <input type = "hidden" name = "MAX_FILE_SIZE"  value = "<?php echo isset($form_1)? $form_1->Return_Octets(ini_get('upload_max_filesize')) : ''?>" />
     
                            <input name = "photo[]" type = "file" size = "70" /><br />
     
                            <input name = "photo[]" type = "file" size = "70" />
     
                            <input name = "photo[]" type = "file" size = "70" />
     
                            <input type = "submit" value = "Envoyez"  style = "margin-left:5px" />
                    </p>
     
        </form>
     
            <p>
            <br />Taille maximum de fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?>.&nbsp;&nbsp;Total maximum pour l'ensemble <?php echo ini_get('post_max_size').'o'?>.
            </p>
     
        <div id = "message_tele" style="margin-top:20px;">
     
                    <?php if (!empty($messages_form1))
     
                    foreach ($messages_form1 as $num)
                            {
                                    foreach ($num as $value)
                                    echo htmlspecialchars($value).'<br />';
                            }
                    ?>
        </div>
     
    </div>
     
     
     
    <div style="width:650px;margin:auto;margin-top:80px;">
     
            <form enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_formulaire_2=1'?>" method = "post" onsubmit = "Verif_attente('message_tele2')" id = "formulaire_2">
            <p>
     
                    <!-- input d'identification du formulaire qui doit être passé en paramètre dans l'initialisation de la classe-->
                    <input type = "hidden" name = "formulaire_2" value = "1" />
     
                <!-- Par défaut MAX_FILE_SIZE = Return_Octets(ini_get('upload_max_filesize') donc ne sert à rien en l'état. Pour limiter l'upload à une taille inférieure vous pouvez rentrez une valeur suivie de son unité, exemple $form2_pdf->Return_Octets('500K') pour 500 kilos octets, $form2_pdf->Return_Octets('1M') pour 1 méga octets etc. La fonction "Return_Octets" est employée pour la conversion en octets car le champ MAX_FILE_SIZE demande une valeur en octets. -->
     
                    <input type = "hidden" name = "MAX_FILE_SIZE"  value = "<?php echo isset($form2_pdf) ? $form2_pdf->Return_Octets(ini_get('upload_max_filesize')) : '' ?>" />  
     
                <label for="login">Login</label><br />
                <input type = "text" id = "login" name = "login"  size = "70" /><br />
     
                <span>Fichiers photos (png, jpg, jpeg, gif)</span><br />
                    <input name = "photo[]" type = "file" size = "70" /><br />
                    <input name = "photo[]" type = "file" size = "70" /><br />
     
                <label for="pdf">Fichier pdf (pdf)</label><br />
                    <input id = "pdf" name = "pdf" type = "file" size = "70" />
     
                    <input type = "submit" value = "Envoyez"  style = "margin-left:5px" />
     
            </p>
            </form>
     
        <p>    
                    <br />Taille maximum de fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?>.&nbsp;&nbsp;Total maximum pour l'ensemble <?php echo ini_get('post_max_size').'o'?>.
            </p>
     
            <div id = "message_tele2" style="margin-top:20px;">
            <?php
            if (!empty($messages_form2_photo))
                            {
                                    echo '<p>';
                                            foreach ($messages_form2_photo as $num)
                                                    {
                                                            foreach ($num as $value)
                                                            echo htmlspecialchars($value).'<br />';
                                                    }
                                    echo '</p>';
                            }
     
            if (!empty($messages_form2_pdf))
                            {
                                    echo '<p>';
                                            foreach ($messages_form2_pdf as $num)
                                                    {
                                                            foreach ($num as $value)
                                                            echo htmlspecialchars($value).'<br />';
                                                    }
                                    echo '</p>';
                            }
            ?>
            </div>
    </div>  
     
     
    <div style="margin-top:100px" >
            <p>
                    <?php
                    // Lecture du tableau des résultats (se trouve ici uniquement pour la démonstration et visualiser la structue des tableaux de résultat)
                    if (!empty ($tranfert_form1))
                            {
                                    $identifant = $tranfert_form1['identifiant'];
                                    $champ = $tranfert_form1['champ'];    
                                    $resultat = $tranfert_form1['resultat'];//tableau à trois dimensions
     
     
                                    echo $identifant.' :<br /><br />';
     
                                    foreach ($resultat as $num => $rep)
                                            {
                                                    foreach ($rep as $key => $value)
                                                            {                                                      
                                                                    if(!empty($value['nom']))                                  
                                                                    echo 'champ '.$champ.' n° '.$num.' = '.$value['nom'].' '. $value['dim'].', téléchargé dans "'.$key.'"<br />';
                                                            }    
                                            }  
                            } ?>
                    <br />
            </p>
    </div>
     
     
     
    <div style="margin-top:100px">
            <p>
                    <?php
                    // Lecture du tableau des résultats (se trouve ici uniquement pour la démonstration et visualiser la structue des tableaux de résultat)
                    if (!empty ($transfert_form2_photo))
                            {
                                    $identifant = $transfert_form2_photo['identifiant'];
                                    $champ = $transfert_form2_photo['champ'];      
                                    $resultat = $transfert_form2_photo['resultat'];//tableau à trois dimensions  
     
                                    echo $identifant.' :<br /><br />';
     
                                    foreach ($resultat as $num => $rep)
                                            {
                                                    foreach ($rep as $key => $value)
                                                            {                                                      
                                                                    if(!empty($value['nom']))                                  
                                                                    echo 'champ '.$champ.' n° '.$num.' = '.$value['nom'].' '. $value['dim'].', téléchargé dans "'.$key.'"<br />';
                                                            }    
                                            }
                            } ?>
                    <br />
            </p>
     
            <p>
                    <?php
                    // Lecture du tableau des résultats (se trouve ici uniquement pour la démonstration et visualiser la structue des tableaux de résultat)
                    if (!empty ($transfert_form2_pdf))
                            {
                                    $identifant = $transfert_form2_pdf['identifiant'];
                                    $champ = $transfert_form2_pdf['champ'];        
                                    $resultat = $transfert_form2_pdf['resultat'];//tableau à trois dimensions  
     
     
                                    foreach ($resultat as $num => $rep)
                                            {
                                                    foreach ($rep as $key => $value)
                                                            {                                                          
                                                                    if(!empty($value['nom']))                                  
                                                                    echo 'champ '.$champ.' n° '.$num.' = '.$value['nom'].' '. $value['dim'].', téléchargé dans "'.$key.'"<br />';
                                                            }    
                                            }
                            } ?>
            </p>
    </div>
     
    </body>
    </html>

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php 
    //Si on travaille en utf-8
    header('Content-type: text/html; charset=UTF-8');
     
    require('Classe_Upload.php');
     
     
    //Liste des dossiers autorisés (sans caractères spéciaux ni accents, ni espaces)
    $dossiers_autorise = array('nature','sport','portraits','autres');
     
    $dossier = $dossiers_autorise[0];
     
    $erreur_dossier = null;
     
    // Si le formulaire est envoyé on regarde si $_POST['categorie'] fait partie du tableau de dossiers autorisés
    if(isset($_POST['form_envoi'],$_POST['categorie']))
    {
            if (in_array($_POST['categorie'],$dossiers_autorise))
     
            $dossier = $_POST['categorie'];
     
            else
     
            $erreur_dossier = 'Vous devez choisir la catégorie';
    }
     
     
    if (empty($erreur_dossier))
     
            {
                            //Utilisation de la classe de téléchargement (cf la doc pour plus de précisions)
                             $up = new Telechargement($dossier,'form_envoi','fich_upload','get_form');
     
                            //Extensions autorisées
                            $extensions = array("jpeg", "jpg");
                            $up->Set_Extensions_accepte ($extensions);
     
                            // Redimensionnement des images en maximum 1000px de largeur et 800px de hauteur (tout en conservant les proportions)
                            $up->Set_Redim ('1000','800');
     
                            // En cas de doublon sur le serveur, les fichiers seront renommés  avec une méthode incrémentale (pour changer la méthode d'incrémentation cf la doc).
                            $up->Set_Renomme_fichier('incr');
     
                            // Envoi des données et traitement de l'upload avec rechargement de la page pour éviter un multi upload en cas de rafraichissement de la page.
                            $up->Upload('reload');
     
                            // Récupération des messages d'information
                            $resultat = $up->Get_Tab_message();
           }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans nom</title>
    </head>
     
    <body>
    <div>
     
    <form enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_form=1'?>" method = "post">  
    <p>  
    Catégorie : <select name="categorie" >
    <option value="">Choisissez...</option>
    <?php foreach ($dossiers_autorise as $value) echo '<option value="'.$value.'">'.$value.'</option>';?>
     
    </select>
     
    <br /> <br />
     
    <input name = "fich_upload[]" type = "file" size = "70" />
     
    <input type = "submit" name = "form_envoi" value = "Envoyez"  />  
    </p>  
    </form>
        <div style="margin-top:20px;">
     
            <?php if (!empty($resultat))
     
            foreach ($resultat as $num)
                {
                    foreach ($num as $value)
                     echo htmlspecialchars($value).'<br />';
                }
     
            if(isset($erreur_dossier)) echo $erreur_dossier;
     
            ?>
        </div>
    </div>
    </body>
    </html>
    L'intérêt de ce code est qu'il permet d'instancier la classe ($up = new Telechargement($dossier,'form_envoi','fich_upload','get_form'); ) en dehors de la condition if(isset($_POST...
    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.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    <?php
    // Appel de la classe
    require('Classe_Upload.php');
     
    //Si on travaille en utf-8
    header('Content-type: text/html; charset=UTF-8');
     
     
    // Déclaration de la classe avec envoi des paramètres (cf doc)
    $form = new Telechargement ('PHOTO','envoi_file','photo','get_form_1');
     
    // option : contrôle que le fichier est une image de type gif, jpg, jpeg ou png (et retourne ses dimensions dans le tableau des résultats - tableau non exploité dans l'exemple ci-dessous)
    $form->Set_Controle_dimImg ();
     
    //option pour renommer le fichier en mode incrémentiel si un fichier de même nom existe déjà sur le serveur
    $form->Set_Renomme_fichier ('incr');
     
     
    //Téléchargement sans traitement php supplémentaire -> on spécifie un rechargement de la page suite au téléchargement en indiquant un argument non nul ex 'reload' dans la fonction d'Upload.
    $form->Upload ('reload');
     
     
    // Enregistrement des messages de contrôle
    $messages_form = $form->Get_Tab_message ();
     
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Téléchargement de fichiers, upload multiple</title>
     
    <script type="text/JavaScript">
    <!--
    function Attente_Load(id_attente)// écrit patientez durant le téléchargement
        {              
            var id_attente = document.getElementById(id_attente);
     
            if (id_attente)
            {
    	    id_attente.innerHTML = 'Patientez...';  
     
                id_attente.style.fontWeight="bold";
                id_attente.style.fontSize="1.5em";         
            }
        }
     
     
     
    function Add_Load_File(id_content_file) // Ajoute un champ de téléchargement
    	{
    		var content_file = document.getElementById(id_content_file);
     
    		var tab = content_file ? content_file.getElementsByTagName('input') : new Array();
     
    		if(tab.length > 0) 
    		{
    		 	var input = tab[0].cloneNode(true);
    			input.value = '';
    			content_file.appendChild(input);
    		}	
    	}
    -->
    </script>
    <style type="text/css">
    body {
    font-family:Arial, Helvetica, sans-serif;
    font-size:1em;
    }
     
    p, input, form {
    margin:0;
    padding:0;
    }
     
    #bord_form {
    width:700px;
    margin:auto;
    border:5px  double #999999;
    padding-top:1em;
    padding-bottom:1em;
    }
     
    #content_form {
    width:650px;
    margin:auto;
    font-size:0.8em;
    }
     
    .info p {
    margin-top:0.3em;
    }
     
    #form_file {
    text-align:right;
    }
     
    #form_file p {
    margin-top:1.5em;
    }
     
    #form_file #champ_file input  {
    margin-top:0.3em;
    padding:0;
    height:1.8em;
    width:100%;
    }
     
    #form_file #add_load_file {
    font-size:0.85em;
    text-decoration:underline; 
    cursor:pointer;
    }
     
    #form_file #envoyer {
    width:8em;
    height:2.5em;
    font-weight:bold;
    }
     
    #message_tele {
    margin-top:1em;
    }
    </style>
     
     
    </head>
     
    <body>
     
    <div id = "bord_form">
     
    	<div id = "content_form">
     
    		<div class = "info">
    		<p>Fichiers autorisés "jpg", "jpeg", "gif", "png".</p>
     
    		<p>Taille maximum de fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?>.&nbsp;&nbsp;Total maximum pour l'ensemble <?php echo ini_get('post_max_size').'o'?>.</p>
    		</div>
     
    		<form id = "form_file" enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_form_1=1'?>" method = "post" onsubmit = "Attente_Load('message_tele')">
     
    		<p id = "champ_file"><input type = "file" name = "photo[]"  size="90" multiple = "multiple" /></p>
     
    		<p id = "add_load_file" onclick = "Add_Load_File('champ_file')">Ajouter un champ de téléchargement</p>
     
    		<p><input type = "submit" name = "envoi_file" value = "Envoyez" id = "envoyer" /></p>
     
    		</form>
     
    		<div id = "message_tele" class = "info">
     
    					<?php if (isset($messages_form))
    					foreach ($messages_form as $num)
    							{
    									foreach ($num as $value)
    									echo '<p>- '.htmlspecialchars($value).'</p>';
    							}
    					?>
    		</div>
     
    	</div>
     
    </div>
     
    </body>
    Note :

    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.

  5. #5
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    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.
    Et pourtant... Elle tourne.
    http://www.djib.me

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par beejeridou Voir le message
    Perso j'aurais fais 2 classes, une pour l'upload et l'autre juste pour les redimentionnements d'images.
    On n'a pas eu la même approche.

    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


    Citation Envoyé par beejeridou Voir le message
    J'aurais aussi créé un repertoire automatiquement si non existant.
    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 Envoyé par beejeridou Voir le message
    J'aurais utilisé une expression régulière pour le cleanage du nom de fichier.
    Il y en a bien une ! Simplement elle est précédée d'un tableau de correspondance pour garder un maximum de caractères utiles.


    Citation Envoyé par beejeridou Voir le message
    Je trouve dommage qu'il n'y ait pas de crop d'images.
    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.

  7. #7
    Invité
    Invité(e)
    Par défaut
    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é :
    $img->Set_Nomme_fichier('logo_' . $nom_du_site,'ext_fichier_telecharge');
    $img->Set_Redim ('400','120');
    $img->Set_Nomme_fichier('mini_' . $nom_du_site,'ext_fichier_telecharge');
    $img->Set_Redim ('100','30');
    J'ai aussi cette erreur qui s'affiche :
    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 ?
    Dernière modification par Invité ; 17/01/2012 à 18h51.

  8. #8
    Invité
    Invité(e)
    Par défaut
    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

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut Message obsolète. La classe propose désormais la gestion des suffixes/préfixes à partir de la version 3.0
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    return array($infos[0], $infos[1], $infos[2], $infos['bits']);
    ou même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    La classe a été mise à jour (nouvelle version 2.2) :

    - évite la notice (décrite dans le message ci-dessus) qui pouvait s'afficher en local lors de redimensionnements de fichiers autres que jpg/jpeg.
    - optimisation de la fonction de renommage de fichiers en mode incrémentiel.

    Lien de téléchargement ici

  11. #11
    Candidat au Club
    Homme Profil pro
    Electricien
    Inscrit en
    Avril 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Electricien

    Informations forums :
    Inscription : Avril 2010
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Bonjour à tous.

    Je voulais juste dire merci pour cette classe, car c'est exactement ce que je cherchais à faire et ça m'aurais pris des années, voir des siècles....

    Bravo au concepteur et encore merci de nous le faire partager

    Bonnes fêtes à tous
    Bye

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par -Xoom- Voir le message
    Bonjour à tous.

    Je voulais juste dire merci pour cette classe, car c'est exactement ce que je cherchais à faire et ça m'aurais pris des années, voir des siècles....

    Bravo au concepteur et encore merci de nous le faire partager

    Bonnes fêtes à tous
    Bye
    Merci ça fait plaisir

    Je rajouterai dans un prochain message un exemple avec une barre de progression du téléchargement et affichage du temps restant

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut Upload de fichiers avec barre de progression et affichage du temps restant
    Bonjour,

    php 5.4 nous offre désormais la possibilité d'avoir des informations sur la progression d'un upload via une variable de session. En faisant une requête ajax il est donc possible d'afficher des informations textuelles et/ou une barre de progression pour indiquer l'avancement de l'upload.

    Dans le script ci-dessous, je reprend mon dernier exemple en y ajoutant une barre de progression et l'information du temps restant.

    Vous remarquerez que le code php reste identique. Le code javascript a été complété pour faire les requêtes ajax et le code html pour inclure l'input d'identification de la variable de session et le div d'affichage de la progression. Des liens vers des fichiers javascript ont également été ajoutés comme indiqué ci-dessous :

    J'utilise jquery par simplification car il peut nous fournir une barre de progression prête à l'emploi.
    En plus de jquery vous devrez donc télécharger les fichiers "jquery.ui.core.min.js", "jquery.ui.widget.min.js", "jquery.ui.progressbar.min.js", et "jquery-ui-1.8.23.custom.css" (ou équivalent suivant la version).
    Vous trouverez ces fichiers en allant sur http://jqueryui.com/download puis cliquez pour commencer sur "Deselect all components" (ou sur "Toggle All") , puis sélectionnez simplement "Progressbar" puis faites le download. Ces fichiers se trouvent quelque part dans le dossier que vous aurez décompressé. Dans mon exemple j'ai mis ces fichiers dans un dossier nommé "Script" pour les fichiers javascript, et "librairie" pour le dossier "ui-lightness" (qui contient des fichiers css et des images).
    Si vous voulez une barre de progression animée regardez mon commentaire dans le code css du script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    <?php
    // Appel de la classe
    require('Classe_Upload.php');
     
    //Si on travaille en utf-8
    header('Content-type: text/html; charset=UTF-8');
     
     
    // Déclaration de la classe avec envoi des paramètres (cf doc)
    $form = new Telechargement ('PHOTO','envoi_file','photo','get_form_1');
     
    // option : contrôle que le fichier est une image de type gif, jpg, jpeg ou png (et retourne ses dimensions dans le tableau des résultats)
    $form->Set_Controle_dimImg ();
     
    //option pour renommer le fichier en mode incrémentiel si un fichier de même nom existe déjà sur le serveur
    $form->Set_Renomme_fichier ('incr');
     
     
    //Téléchargement sans traitement php supplémentaire -> on spécifie un rechargement de la page suite au téléchargement en indiquant un argument non nul ex 'reload' dans la fonction d'Upload.
    $form->Upload ('reload');
     
     
    // Enregistrement des messages de contrôle
    $messages_form = $form->Get_Tab_message ();
     
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8" />
    <title>Classe Upload php et barre de progression avec jquery et php >= 5.4</title>
    <!--Chargement de la librairie jquery-->
    <script  src = "Scripts/jquery.js" type="text/javascript"></script>
     
    <!--Chargement des fichiers jquery nécessaires à l'affichage de la barre de progression-->
    <script  src="Scripts/jquery.ui.core.min.js" type="text/javascript"></script>
    <script  src="Scripts/jquery.ui.widget.min.js" type="text/javascript"></script>
    <script  src="Scripts/jquery.ui.progressbar.min.js" type="text/javascript"></script>
    <link rel="stylesheet" type="text/css" href="librairie/ui-lightness/jquery-ui-1.8.23.custom.css"/>
     
    <script type="text/JavaScript">
    <!--
     
    function Add_Load_File(id_content_file) // Ajoute un champ de téléchargement
            {
                    var content_file = document.getElementById(id_content_file);
     
                    var tab = content_file ? content_file.getElementsByTagName('input') : new Array();
     
                    if(tab.length > 0)
                    {
                            var input = tab[0].cloneNode(true);
                            input.value = '';
                            content_file.appendChild(input);
                    }      
            }
     
     
    $(function() // Message "patientez" puis affichage de la progression texte et graphique
            {
                    var echec = 0;
     
                    function Upload_progress (session_name)
                    {
                            $.ajax({
                                    dataType: "json",              
                                    type: "POST",
                                    url: "upload_progression_ajax.php",
                                    data: 'session_progress='+session_name,
     
                                    success: function(result)
                                            {
                                                    var ratio = parseInt(result['ratio']);
                                                    var temps_restant = result['temps_restant'];
                                                    var etat = parseInt(result['etat']);
                                                    var version_php = parseInt(result['php']);
     
                                                    if (version_php == 1)
                                                    {
                                                            if(temps_restant != 'nd')
                                                            {
                                                                    echec = 0;
     
                                                                    $("#message_tele").text(ratio+'% effectués, temps restant approximatif : '+temps_restant);
     
                                                                    if ($.isFunction($("#progressbar").progressbar))
                                                                    {
                                                                            $("#progressbar").progressbar({value: ratio});
                                                                    }
     
                                                                    if(etat == 0)
                                                                    {
                                                                            setTimeout(function() {Upload_progress (session_name);}, 2000);
                                                                    }
                                                            }
                                                            else
                                                            {
                                                                    echec++;
                                                                    if(echec > 1)
                                                                    {
                                                                            window.location.reload(true);
                                                                    }
                                                                    else
                                                                    {
                                                                            setTimeout(function() {Upload_progress (session_name);}, 2000);
                                                                    }
                                                            }
                                                    }
                                            }
                            });
     
                    }
     
                    var input_session = $("#session_progression");
     
                    var session_name = input_session.attr("data-prefix")+input_session.val();
     
                    $("#form_file").on("submit",function(){
     
                            $("#message_tele").html('<span style="font-weight:bold">Veuillez patienter...</span>');                                                
                            setTimeout(function() {Upload_progress (session_name);}, 2000);
     
                    });
     
            });
    -->
    </script>
    <style type="text/css">
    /*pour avoir une barre de progression animée. Attention l'image "pbar-ani.gif" n'est pas par défaut dans "ui-lightness/images", je l'ai copiée dans ce dossier depuis "development-bundle\demos\progressbar\images"*/
    .ui-progressbar .ui-progressbar-value {
            background-image: url(librairie/ui-lightness/images/pbar-ani.gif);
    }
    </style>
     
    <style type="text/css">
    body {
    font-family:Arial, Helvetica, sans-serif;
    font-size:1em;
    }
     
    p, input, form {
    margin:0;
    padding:0;
    }
     
    #bord_form {
    width:700px;
    margin:auto;
    border:5px  double #999999;
    padding-top:1em;
    padding-bottom:1em;
    }
     
    #content_form {
    width:650px;
    margin:auto;
    font-size:0.8em;
    }
     
    .info p {
    margin-top:0.3em;
    }
     
    #form_file {
    text-align:right;
    }
     
    #form_file p {
    margin-top:1.5em;
    }
     
    #form_file #champ_file input  {
    margin-top:0.3em;
    padding:0;
    height:1.8em;
    width:100%;
    }
     
    #form_file #add_load_file {
    font-size:0.85em;
    text-decoration:underline;
    cursor:pointer;
    }
     
    #form_file #envoyer {
    width:8em;
    height:2.5em;
    font-weight:bold;
    }
     
    #message_tele {
    margin-top:1em;
    }
     
    #progressbar {
    margin-top:1em;
    width:45%;     
    height:1em;
    }
    </style>
     
     
    </head>
     
    <body>
     
    <div id = "bord_form">
     
            <div id = "content_form">
     
                    <div class = "info">
                    <p>Fichiers autorisés "jpg", "jpeg", "gif", "png".</p>
     
                    <p>Taille maximum de fichier autorisée par le serveur = <?php echo ini_get('upload_max_filesize').'o'?>.&nbsp;&nbsp;Total maximum pour l'ensemble <?php echo ini_get('post_max_size').'o'?>.</p>
                    </div>
     
                    <form id = "form_file" enctype = "multipart/form-data" action = "<?php echo htmlspecialchars($_SERVER['PHP_SELF']).'?get_form_1=1'?>" method = "post">
     
                    <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $form->Return_Octets(ini_get('upload_max_filesize'))?>" />
     
                    <input id = "session_progression" type = "hidden" data-prefix = "<?php echo ini_get("session.upload_progress.prefix"); ?>" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="<?php echo uniqid()?>" />
     
                    <p id = "champ_file"><input type = "file" name = "photo[]"  size="90" multiple = "multiple" /></p>
     
                    <p id = "add_load_file" onClick="Add_Load_File('champ_file')">Ajouter un champ de téléchargement</p>
     
                    <p><input type = "submit" name = "envoi_file" value = "Envoyez" id = "envoyer" /></p>
     
                    </form>
                    <div id = "progressbar"></div>
                    <div id = "message_tele" class = "info">
     
                                            <?php if (isset($messages_form))
                                            foreach ($messages_form as $num)
                                                            {
                                                                            foreach ($num as $value)
                                                                            echo '<p>- '.htmlspecialchars($value).'</p>';
                                                            }
                                            ?>
                    </div>
     
            </div>
     
    </div>
     
    </body>
    Le script fait appel en ajax au fichier "upload_progression_ajax.php" dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    header('Content-type: text/html; charset=UTF-8');
    session_start();
     
    $ses_p = isset($_POST['session_progress']) ? $_POST['session_progress'] : null;
     
    if(isset($ses_p,$_SESSION[$ses_p],$_SESSION[$ses_p]['done'],$_SESSION[$ses_p]['bytes_processed'],$_SESSION[$ses_p]['content_length'],$_SESSION[$ses_p]['start_time']))
            {
                    $start_time = $_SESSION[$ses_p]['start_time']; // heure de début
     
                    $content_length = $_SESSION[$ses_p]['content_length']; // Longueur du contenu POST
     
                    $bytes_processed = $_SESSION[$ses_p]['bytes_processed'];  // Quantité d'octets reçus et traités
     
                    $done = $_SESSION[$ses_p]['done']; // true lorsque le gestionnaire POST a terminé, avec succès ou non
     
                    $done = empty($done)? 0 : 1;
     
                    $time_now = time();
     
                    $time_diff = $time_now - $start_time;
     
                    $bytes_diff = $content_length - $bytes_processed;
     
                    $vitesse = $bytes_processed/$time_diff;
     
                    $prevision_time = $bytes_diff/$vitesse;
     
                    $heures = floor($prevision_time/3600);
                    $reste = $prevision_time%3600;
                    $minutes = floor($reste/60);
                    $reste = $reste%60;
     
                    $time = array('h'=>$heures,'min'=>$minutes,'s'=>$reste);
                    $time = array_filter($time);
                    $time = array_map('intval',$time);
     
                    $temps_restant = '';
                    foreach($time as $key => $value) $temps_restant .= $value.$key.' ';
     
                    // Temps nécessaire (ici 6 secondes) avant d'envoyer la valeur du temps restant sinon sur une période trop courte la valeur calculée n'est pas significative.
                    $temps_restant = $time_diff < 6 ? 'calcul en cours' : $temps_restant;
     
                    $ratio_bytes = intval(round($bytes_processed/$content_length*100));
     
                    $tab_json = array('ratio'=>$ratio_bytes,'temps_restant'=>$temps_restant,'etat'=>$done,'php'=>1);
     
            }
            else // si la condition précédente n'est pas remplie c'est probablement que le post dépasse la valeur maximale autorisée par le serveur ou que la version de php < 5.4 ou que le fichier est déjà téléchargé et la variable de session effacée car nettoyée par session.upload_progress.cleanup.
            {
                    $version_php_ok = version_compare(PHP_VERSION, '5.4.0') >= 0 ? 1: 0;
     
                    $tab_json = array('ratio'=>0,'temps_restant'=>'nd','etat'=>1,'php'=>$version_php_ok);
            }
     
    echo json_encode($tab_json);
    ?>
    Faites des tests sur des fichiers d'au moins 1 méga afin que les informations de téléchargement aient le temps de s'afficher.

    Complément pratique : la requête ajax permet par la même occasion de savoir si la directive "post_max_size" est dépassé ou non. Vous n'aurez donc à attendre que quelques secondes avant le reload de la page et l'affichage du message d'avertissement (alors qu'avant il fallait se taper tout l'upload du post avant de savoir qu'il ne pouvait pas être téléchargé sur le serveur car trop gros).
    Par contre en cas de dépassement du "max_file_size" cela reste comme avant (faut attendre) car il serait impossible de choisir depuis php quel fichier doit être interrompu, en effet la variable de session $_SESSION[$key]["cancel_upload"] annule également tous les fichiers en attente. Mais le dépassement du "max_file_size" ne pose généralement pas de problème car la plupart du temps les serveurs sont configurés avec une valeur de "max_file_size" égale à la valeur de "post_max_size".

    Attention avec les navigateurs Chrome et Safari : ces navigateurs sont pour l'instant buggués et ne permettent pas de faire des requêtes ajax en même temps qu'un upload. Cela ne bloque pas l'upload mais vous ne verrez donc que le message "Patientez" durant le chargement. Cela dit Chrome possède une fonction intégrée sur la progression de l'upload qui s'affiche à gauche en bas de la page, c'est donc un moindre mal.

    Debug :
    - Si le message "patientez" ne s'affiche pas c'est que vous n'avez pas installé jquery
    - Si (pour un upload de plusieurs secondes) le message "patientez" n'est pas remplacé par un message de progression d'upload c'est que vous n'avez pas php 5.4 mais une version inférieure (ou un navigateur buggué cf paragraphe ci-dessus).
    - Si (pour un upload de plusieurs secondes) seul un message de progression d'upload s'affiche en remplacement du message "patientez", mais sans la barre de progression, c'est que vous n'avez pas correctement configuré le chemin des fichiers jquery nécessaires à l'affichage de la barre de progression.


    Note : Oui on pourrait aussi attendre que tous les navigateurs supportent correctement les nouvelles fonctionnalités d'upload html5. L'avantage de cette solution est qu' hormis les deux navigateurs buggés cités ci-dessus, l'affichage de la progression fonctionne avec tous les navigateurs mêmes très anciens comme IE 6...

    Télécharger la dernière version de la classe d'upload ici

  14. #14
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    La classe a été mise à jour (il y a déjà 6 mois) mais j'avais oublié de le mentionner ici. La version 2.4 comprend :

    1/ Personnalisation plus facile des messages d'information (2 fonctions ajoutées) :
    - Set_Message_court()
    - Set_Separateur_dimImg()

    Ces fonctions permettent respectivement de personnaliser plus facilement les messages courts destinés au visiteur et de choisir le séparateur pour le retour des dimensions des images.

    2/ Amélioration de la gestion des erreurs :
    - Gestion de l'erreur max_file_uploads
    - Renforcement de la gestion de l'erreur post_max_size

    La classe indique l'erreur en cas de dépassement du nombre de fichiers téléchargés autorisés par le serveur lors d'un téléchargement multiple.

    la variable $_GET de contrôle d'envoi du formulaire (quatrième paramètre lors de l'instanciation de la classe) n'est plus indispensable pour permettre la gestion de l'erreur de dépassement de "post_max_size". On peut néanmoins continuer à renseigner ce paramètre comme mesure complémentaire contribuant à gérer cette erreur.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 8
    Points
    8
    Par défaut
    Bonjour à tous.

    Je voulais juste dire merci pour cette classe, car c'est exactement ce que je cherchais à faire

    Mon problème et le message ok ou erreur !

    voici mon code j'ai trouver la fonction mais cela affiche "- "400_F_5.jpg" renommé "5555" optimisé en 400x400 téléchargé dans le dossier admin/logo/logo_modif/"

    Moi j'aimerai un petit apercu et un bouton suivant

    et ci erreur bien un message erreur !

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <?php require('Classe_Upload.php');
     
     
     
    $up = new Telechargement('admin/logo/logo_modif/','form1','doc');
     
    $extensions = array('jpg','JPG');
    $up->Set_Redim ('666','500');
    $up->Set_Extensions_accepte ($extensions);
    $up->Set_Nomme_fichier('5555');
    $up->Upload('reload');
    $messages_form = $up->Get_Tab_message ();
    ?>
     
     
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Document sans titre</title>
    </head>
     
     
     
    <form enctype = "multipart/form-data" action = "#" method = "post">	  
    <input name = "doc" type = "file" size = "70" />		
     
     
    <input type = "submit" name = "form1" value = "Envoyez"  />	
    </form>
     
    <div id = "message_tele" class = "info">
     
    					<?php if (isset($messages_form))
    					foreach ($messages_form as $num)
    							{
    									foreach ($num as $value)
    									echo '<p>- '.htmlspecialchars($value).'</p>';
    							}
    					?>
    		</div>
     <body>
    </body>
    </html>

  16. #16
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    La classe de téléchargement (maintenant version 2.5) et le mode d'emploi ont été mis à jour :

    - Modification du fonctionnement de la fonction "Set_Message_court" qui en l'absence de paramètre permet maintenant de ne plus afficher les messages de résultats de l'upload excepté les messages d'erreurs.

    Lien de téléchargement ici

    Cette option permet de répondre au message précédent c.a.d. de faire afficher uniquement une vignette correspondant au fichier téléchargé en cas de succès si c'est une image (et un éventuel message de confirmation si ce n'est pas une image) tout en préservant l'affichage des messages d'erreur. Exemple de code dans le message suivant.

  17. #17
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    @bibi67290

    Comme indiqué dans mon message précédent, télécharges la nouvelle version 2.5.

    - En utilisant la fonction "Set_Message_court" sans indiquer de paramètre, cela permet de ne faire afficher que les messages d'erreur.

    - Pour afficher néanmoins les vignettes images correspondant au fichier téléchargé, on peut se servir du tableau de résultats avec la fonction "Get_Tab_upload" donnée en exemple dans mon second message. Le tableau fourni de nombreuses informations dont le nom du dossier et le nom du fichier, il est donc possible de s'en servir pour faire afficher l'image correspondante.

    Pour réduire l'image pour afficher la vignette j'ai utilisé une fonction (un peu modifiée) prise dans ce tuto que j'ai renommée "dimimage"

    Voilà donc un exemple de code complet avec tes paramètres initiaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    <?php
    require('Classe_Upload.php');
     
    $up = new Telechargement('admin/logo/logo_modif/','form1','doc');
     
    $extensions = array('jpg','jpeg');
    $up->Set_Extensions_accepte ($extensions);
     
    $up->Set_Redim ('666','500');
     
    $up->Set_Nomme_fichier('5555.jpg');
     
    $up->Set_Message_court ();// si aucun paramètre n'est indiqué, cette fonction supprime les messages à l'exception des erreurs
     
    $up->Upload('reload');
     
    $messages_form = $up->Get_Tab_message ();
     
    $tab_result = $up->Get_Tab_upload ();// pour avvoir le tableau des résultats 
    // fin du paramétrage de la classe
     
     
     
    // Fonction pour redimensionner les images pour l'affichage des vignettes témoin de l'upload
    function dimimage($img_size, $W_max, $H_max) {
     
       // ---------------------
       $W_Src = $img_size[0]; // largeur source
       $H_Src = $img_size[1]; // hauteur source
       // ---------------------
       if(!$W_max) { $W_max = 0; }
       if(!$H_max) { $H_max = 0; }
       // ---------------------
       // Teste les dimensions tenant dans la zone
       $W_test = round($W_Src * ($H_max / $H_Src));
       $H_test = round($H_Src * ($W_max / $W_Src));
       // ---------------------
       // si l'image est plus petite que la zone
       if($W_Src<$W_max && $H_Src<$H_max) {
          $W = $W_Src;
          $H = $H_Src;
       // sinon si $W_max et $H_max non definis
       } elseif($W_max==0 && $H_max==0) {
          $W = $W_Src;
          $H = $H_Src;
       // sinon si $W_max libre
       } elseif($W_max==0) {
          $W = $W_test;
          $H = $H_max;
       // sinon si $H_max libre
       } elseif($H_max==0) {
          $W = $W_max;
          $H = $H_test;
       // sinon les dimensions qui tiennent dans la zone
       } elseif($H_test > $H_max) {
          $W = $W_test;
          $H = $H_max;
       } else {
          $W = $W_max;
          $H = $H_test;
       }
     
     return array($W,$H);
    };
     
    ?>
     
     
    <!doctype html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8" />
    <title>Upload de fichiers</title>
    </head>
     
    <body>
     
    <form enctype = "multipart/form-data" action = "#" method = "post">	  
    <input name = "doc" type = "file" size = "70" />		
    <input type = "submit" name = "form1" value = "Envoyez"  />	
    </form>
     
    <div id = "message_tele" class = "info">
    <!-- POUR AFFICHER LES MESSAGES D'INFORMATION (uniquement les erreurs puisque la fonction "Set_Message_court" a été utilisée sans paramètre) --> 
    <?php if (isset($messages_form))
    	foreach ($messages_form as $num)
    			{
    				foreach ($num as $value)
    				echo '<p>- '.htmlspecialchars($value).'</p>';
    			}
    ?>
    </div>
     
    <!-- POUR AFFICHER LES VIGNETTES DES IMAGES -->
    <div style="margin-top:30px" >
    	<p>
    	<?php
        // Lecture du tableau des résultats 
        if (!empty ($tab_result))
            {
                $resultat = $tab_result['resultat'];//tableau à trois dimensions
     
    	    echo count($resultat) > 0 ? 'Fichiers téléchargés : <br><br>' : 'Aucun fichier téléchargé.<br><br>';			
     
                foreach ($resultat as $num => $rep)
                { 
                    foreach ($rep as $key => $value)
                    { 
                       // $key = nom du dossier, $value['nom'] = nom du fichier
     
                        if(!empty($value['nom']))	
                        {
     
    			$adresse_racine = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;
     
                            $adresse_fichier = $adresse_racine.$key.'/'.$value['nom'];
     
    			$img_size = @getimagesize($adresse_fichier);
     
    			$max_hauteur = 150; //hauteur maximum de la vignette de prévisualisation
    			$max_largeur = 150; //largeur maximum de la vignette de prévisualisation
     
    			if(isset($img_size[0]) && is_numeric($img_size[0]) && $img_size[0] > 0)
    			{
    			    $http = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https://' :  'http://';
                                $adresse_html = $http.$_SERVER['SERVER_NAME'].'/'.$key.'/'.$value['nom'];
     
    			    $dim_vignette = dimimage($img_size, $max_hauteur, $max_largeur);
                            ?>
                                <img alt="<?=$value['nom']?>"  title="<?=$value['nom']?>" src="<?=$adresse_html?>" width="<?=$dim_vignette[0]?>" height="<?=$dim_vignette[1]?>" />
                       <?php } 
                            else echo '- '.$value['nom'].' ok<br>';
                        }
                    }     
                }   
            } ?>
    	</p>
    </div>
    </body>
    </html>
    Note que ce n'est pas la peine d'indiquer les extensions de fichier en majuscules (la classe s'en charge) par contre un fichier 'jpg' peut parfois avoir l'extension 'jpeg'.
    Par rapport à ton code j'ai aussi ajouté l'extension 'jpg' dans la fonction "Set_Nomme_fichier" car tu auras du mal à faire afficher un fichier sans extension.
    Alternativement comme indiqué dans le mode d'emploi de la classe tu pourrais indiquer un deuxième paramètre quelconque (non vide et de ton choix) pour dire à la fonction que le fichier peut utiliser l'extension du fichier original, ce qui pourrait donner :
    $up->Set_Nomme_fichier('5555','extension_originale');

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 8
    Points
    8
    Par défaut
    @ABCIWEB

    Merci beaucoup super !

    Juste un point c normal que les images portrait télécharger ce mette en paysage ?

  19. #19
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    J'ai testé le code que j'ai donné dans le message précédent et tout se passe normalement : les photos paysage s'affichent horizontalement et les photos portraits s'affichent verticalement, elles sont conformes à ce qu'elles affichent initialement dans l'explorateur de fichiers. L'origine de ton pb ne vient pas du code, il est autre part.

  20. #20
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    La classe de téléchargement a été mise à jour (version 2.6) :

    - Le tableau multidimensionnel de résultats obtenu par la fonction "Get_Tab_upload ()" contient maintenant les noms des fichiers originaux en complément de leur nom définitif (renommés si besoin).

    - L'index "resultat" de ce tableau renvoi un tableau vide si aucun fichier n'a été téléchargé (formulaire vide, ou erreur, ou extension non autorisée).

    C'est un petit complément qui permet plus de possibilités si l'on veut se servir de ce tableau de résultats à des fins diverses comme mon dernier exemple de code, entre autre.

Discussions similaires

  1. upload et redimensionnement d'image
    Par tim1789 dans le forum Langage
    Réponses: 2
    Dernier message: 20/06/2011, 09h52
  2. upload puis redimensionnement d'image limité à 2 Mo
    Par franckcl dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2010, 12h38
  3. [GD] Upload et redimensionnement d'images volumineuses
    Par migli dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 10/06/2010, 11h12
  4. Réponses: 1
    Dernier message: 18/01/2008, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo