Page statique de téléchargement

Bonjour, j'aimerais insérer dans mon site une page statique de téléchargement qui listerais tout les documents préalablement uploadés. Quelqu'un a-t-il déjà fait cela?
Merci d'avance
http://waigunga.clanfree.net/
«134

Réponses

  • Je ne suis pas très doué en programmation, quelqu'un pourrai-il m'aider?
  • Salut Zugmy
    La modification du code donnée dans le wiki est très simple
    <?php
    # Nom du dossier images à renseigner
    $dir = 'data/images/galerie1';
    # Récupération et affichage de la liste des images sous forme de liste
    $glob = new plxGlob($dir);
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png).tb$/')) {
        echo '<ul class="galerie">';
        foreach($files as $filename) {
            $file = $dir.'/'.$filename;
            echo '<li><a href="'.str_replace('.tb', '', $file).'"><img src="'.$file.'" alt="" /></a></li>';
        }
        echo '</ul>';
    }
    else echo "Aucune image";
    ?>
    
    Il faut que tu mette le nom de ton répertoire dans cette ligne : $dir = 'data/images/galerie1';

    Ensuite ajoute les extensions que tu souhaite voir apparaitre dans ta page de téléchargements : if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png).tb$/')) {
    on supprime aussi le .tb qui servait à cherche les miniatures :
    Ajoute par exemple : les pdf et les zip : (jpg|gif|png|pdf|zip)$/')

    Pour finir il faut personnaliser l'affichage en modifiant cette ligne :
    echo '<li><a href="'.str_replace('.tb', '', $file).'"><img src="'.$file.'" alt="" /></a></li>';

    On va par exemple afficher uniquement le nom du fichier avec un lien :
    echo '<li><a href="'.$file.'">' . str_replace($dir, '', $file) . '</a></li>';

    Édit : J'ai modifié quelques ligne ça fonctionne.
  • merci je me disais bien que ça pourrait faire une base
    du coup on peut le décliner avec tout média (ex sons, vidéos etc) :-)
  • antistressantistress Member
    janvier 2010 modifié
    Dans le cadre de séquences ogg theora/vorbis que j'envisage d'inclure sur mon blogue via la balise vidéo, j'ai utilisé tes explications pour créer une page affichant les séquences audio/vidéo :
    <?php
    # Nom du dossier séquences à renseigner
    $dir = 'data/documents';
    # Récupération et affichage de la liste des séquences sous forme de liste
    $glob = new plxGlob($dir);
    if ($files = $glob->query('/[a-z0-9-_]+.(ogg)$/')) {
        echo '<ul class="galerie">';
        foreach($files as $filename) {
            $file = $dir.'/'.$filename;
            echo '<li><a href="'.$file.'">' . str_replace($dir, '', $file) . '</a></li>';
        }
        echo '</ul>';
    }
    else echo "Aucune séquence";
    ?>
    
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour Zugmy

    Ce code (à mettre dans une page statique) devrait faire ton affaire
    <?php
    # Nom du dossier images à renseigner
    $dir = 'data/documents';
    # Récupération et affichage de la liste des images sous forme de liste
    $glob = new plxGlob($dir);
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $file = $dir.'/'.$filename;
            echo '<li><a href="./?telechargement/'.plxEncrypt::encryptId($filename).'">'.$filename.'</a></li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    
    Rajoute les extensions autorisées au téléchargement
    (jpg|gif|png|zip|rar|txt|pdf|mp3|flv)
    
    NB/ si les fichiers sont uploadés à la main par FTP, veillez à ce qu'ils soient nommés avec uniquement des minuscules, des chiffres et le caractère _ de manière à valider l'expression régulière qui sélectionne les fichiers: a-z0-9-_

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • antistressantistress Member
    janvier 2010 modifié
    je peux te demander à quoi sert
    echo '<ul class="telechargements">';
    
    et la fonction plxEncrypt à
    echo '<li><a href="./?telechargement/'.plxEncrypt::encryptId($filename).'">'.$filename.'</a></li>';
    
    ?

    D'ailleurs il y en a un au pluriel et l'autre pas c'est normal ?

    Est ce qu'il serait possible de calsser les fichiers par genre ensuite (comme les articles classés par catégories) ?
    Ex :
    pdf
    * ...
    * ...
    ogg theora
    * ...
    * ...
    ogg vorbis
    * ...

    (dans le cas de ogg les extensions sont les mêmes c'est le type mime qui change)
  • StéphaneStéphane Member, Former PluXml Project Manager
    1)
    echo '<ul class="telechargements">';
    
    C'est pour personnaliser l'affichage de la liste grâce au fichier css de ton thème. J'ai mis "telechargements" mais j'aurais pu mettre n'importe quoi. C'est pour rester cohérent car ici il est sujet de téléchargement

    2) La fonction encryptId c'est pour masquer le lien où est stocké le fichier

    3) Oui c'est normal que dans la ligne suivante "telechargement" soit au singulier, car l'url est interprétée par pluxml quand elle est formatée de cette façon. c'est donc un mot réservé.
    echo '<li><a href="./?telechargement/'.plxEncrypt::encryptId($filename).'">'.$filename.'</a></li>';
    
    4) ça devrait être possible de classer par ordre alphabétique en fonction des extensions des fichiers.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • merci

    (et 2° est excellent !)
  • antistressantistress Member
    janvier 2010 modifié
    J'ai uploadé "(audio)Fenster-Free-Software-Song.ogg" dans mon dossier data/documents/ pourtant ma page mentionne "ong.ogg" et en cliquant dessus je retourne sur la page d'accueil
    http://libre-ouvert.toile-libre.org/?static10/toutes-les-sequences-audio-video

    mon code :
    <?php
    # Nom du dossier séquences à renseigner
    $dir = 'data/documents';
    # Récupération et affichage de la liste des séquences sous forme de liste
    $glob = new plxGlob($dir);
    if ($files = $glob->query('/[a-z0-9-_]+.(ogg)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $file = $dir.'/'.$filename;
            echo '<li><a href="./?toutes-les-sequences-audio-video/'.plxEncrypt::encryptId($filename).'">'.$filename.'</a></li>';
        }
        echo '</ul>';
    }
    else echo "Aucune séquence";
    ?>
    <p><a href="?static9/parcourir">retour</a></p>
    
    je pense que j'ai pas compris à quoi sert
    href="./?telechargement/'
    
    ça correspond à un sous-dossier à créer ou c'est l'adresse de la page du site recensant les documents ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Le href="./?telechargement/' c'est comme si on avait mis

    index.php?action=telechargement&fichier=(audio)Fenster-Free-Software-Song.ogg

    Cela permet de savoir que ce qui suit derrière ?telechargement/' est une url cryptée que pluxml va décryptée pour pouvoir envoyé le fichier à l'utilisateur

    dans ton nom de fichier ne met pas de ( et ). Uniquement des minuscules, des chiffres et le caractère _ de manière à valider l'expression régulière qui sélectionne les fichiers: a-z0-9-_

    Ton fichier doit être stocké dans data/documents (pas de sous dossiers), sinon modifie le chemin en conséquences (exemple: data/documents/audios)

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • je vais essayer merci
  • oui, c'était bien ça ça marche avec free_software_song_by_fenster.ogg merci beaucoup :-)
  • antistressantistress Member
    janvier 2010 modifié
    dans le wiki, parties gestion des fichiers et gestion des images, j'ai ajouté :
    "Attention : pour assurer une compatibilité maximale, il est recommandé de nommer vos fichiers avec des caractères minuscules et d'éviter les espaces ainsi que certains caractères comme les parenthèses ou le signe moins (préférer le tiret sous la ligne)."
  • StéphaneStéphane Member, Former PluXml Project Manager
    Super. Merci antistress pour l'ajout dans le wiki.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • antistressantistress Member
    janvier 2010 modifié
    on pourrait aussi afficher à côté la taille des fichiers ?
    j'ai trouvé ça mais je sais pas si ça peut être intégré... http://zigazou.wordpress.com/2009/12/07/affichage-d%E2%80%99une-taille-de-fichier-lisible-humainement-en-php/

    il y a aussi moyen de connaître le type mime apparemment http://tecfa.unige.ch/guides/php/php5_fr/function.mime-content-type.html

    après le xhtml va falloir que je creuse le PHP je sens...
  • Un grand merci de toute l'aide apportée, ce forum est très dynamique et c'est un plaisir d'utiliser pluxml!
  • Une petite idée pour intégrer le code ci-dessus afin d'afficher la taille des fichiers et leur type mime ?
    Pour la taille, la formule serait un truc du genre
    echo mime_content_type('mon_fichier')
    
    mais par quoi remplacer "mon_fichier" ?
  • Tiens ce que je veux faire c'est ce que fait Gmail avec les pièces jointes, par ex :
    "Pigeons.pdf (application/pdf) 74 Ko"
  • StéphaneStéphane Member, Former PluXml Project Manager
    Avec l'affichage de la taille des fichiers
    <?php
    # Nom du dossier images à renseigner
    $dir = 'data/documents';
    # Récupération et affichage de la liste des images sous forme de liste
    $glob = new plxGlob($dir);
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $file = $dir.'/'.$filename;
            $size = ceil(filesize($file)/1024);
            echo '<li><a href="./?telechargement/'.plxEncrypt::encryptId($filename).'">'.$filename.'</a> ('.$size.'Ko)</li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • antistressantistress Member
    janvier 2010 modifié
    merci Stéphane ;-)
    Je l'ai adapté pour avoir les valeurs en Mo :
    $size = round((filesize($file)/1024000), 2);
            echo '<li><a href="./?telechargement/'.plxEncrypt::encryptId($filename).'">'.$filename.'</a> ('.$size.'Mio)</li>';
    
    Je recherche encore pour afficher le type MIME
    apparemment mime_content_type est déprécié avec PHP5 en faveur de finfo_file que je n'arrive pas à intégrer au code pour autant :-/
  • StéphaneStéphane Member, Former PluXml Project Manager
    oui c'est pour ça que je n'est pas mis le code pour mime_content_type

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • antistressantistress Member
    janvier 2010 modifié
    j'ai vu que l'extension "FileInfo" ne fait pas partie intégrante de PHP et qu'il faut l'installer manuellement sur le serveur mais qu'elle serait intégrée par défaut à partir de PHP 5.3 http://blog.pascal-martin.fr/post/php-5.3-fileinfo-informations-fichiers
  • SEGSEG Member
    avril 2010 modifié
    Bonsoir,
    Je n'ai aucunes connaissance en php et lorsque ça ne marche pas c'est un peu difficile de se dépanner... Tous ça pour dire que tous semble fonctionner jusqu'au téléchargement proprement dit, avec un message "Le document spécifié est introuvable".

    - j'ai créé une page statique où j'ai collé le code du wiki
    - modifié le chemin du dossier de téléchargements : "data/downloads"
    - uploadé des fichiers correctement nommés, chiffres, lettres et _

    Pour info j'utilise le thème "static" et l'ensemble est chez Free. C'est peut-être simple... :rolleyes:

    SEG
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour SEG

    Question bête: tes fichiers sont bien présents dans le dossier data/downloads, car si tu utilises le gestionnaire de médias pour les envoyer sur ton serveur, ils sont uploadés dans le dossier data/documents.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • SEGSEG Member
    Bonjour Stéphane,

    Bête... Ce qui serait bête serait qu'ils n'y soient effectivement pas :lol:
    Ils y sont, le dossier "downloads" qui à des droits en 700 et son contenu est en 644. De toutes façons je ne parvient pas à changer les permissions chez Free. Dans le doute du copier/coller,j'ai écrasé le premier script dans la page statique par celui avec les infos de taille de fichiers. J'ai maintenant les tailles des fichiers mais toujours le même message d'erreur !

    Le lien de la page :
    http://se.gorce.free.fr/?static3/telechargements

    Une idée bête à mon tour, en bricolant le thème "static", aurais-je cassé un mécanisme lié au téléchargement ? :/

    SEG
  • SEGSEG Member
    Bon, j'ai "résolu" mon problème... Je ne suis pas développeur et je ne trouve pas de solution, alors j'ai supprimé cette page de téléchargements. Après tout ce ne sont que des tests ;)

    SEG
  • Bonjour mon premier post sur ce forum ^^. Je reup ce topic, pour montrer ou j'en suis arrivé au final avec la statique Download. Tout d'abord je l'ai adapté pour en faire une galerie, et voila ce que ca donne
    <?php
    # Nom du dossier images à renseigner
    $dir = 'images/';
    # Récupération et affichage de la liste des images sous forme de liste
    $glob = new plxGlob($dir);
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|)$/')) {
        echo '<ul class="galerie">';
        foreach($files as $filename) {
            $file = $dir.'/'.$filename;
            $size = round((filesize($file)/1024000), 2);
            echo '<li><img width=100% src="images/'.$filename.'"></img><a href="images/'.$filename.'"> '.$filename.'</a> ('.$size.'Mio)</li>';
        }
        echo '</ul>';
    }
    else echo "Aucune image";
    ?>
    
  • J'utilise ce code mis à ma sauce pour offrir un lien direct vers les fichiers audio/vidéo illustrant le blogue
    Je n'ai pas besoin de dissimuler le chemin d'accès car ces séquences sont accessibles depuis la balise audio/video et le chemin est connu.
    Que dois-je modifier pour supprimer la partie chiffrement et faire en sorte que le fichier se charge ds le navigateur en cliquant dessus (aujourd'hui le navigateur propose le téléchargement et pas la lecture) ?

    merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.