PluXml Forum Home Documentation Ressources Forum Blog PluCSS Github

Page statique de téléchargement

124»

Réponses

  • cpalocpalo Member
    octobre 2017 modifié
    Le lien vers le sujet que Stephane avait lancé avant d'effectuer cette modificationdans Pluxml 5.4
    Ici
  • cpalo a écrit:
    Le lien vers le sujet que Stephane avait lancé avant d'effectuer cette modificationdans Pluxml 5.4
    Ici

    OK !
    J'ai compris, dans mon admin j'ai configuré "data/images" aux lieu de "data/medias"

    8.(
  • Stéphane a écrit:
    Enjoy ! :-)
    <?php
    global $plxMotor;
    # Nom du sous-dossier contenant les fichiers à télécharger dans /data/medias/
    $dir = 'downloads/';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance(PLX_ROOT.$plxMotor->aConf['medias'].$dir);
    if ($files = $glob->query('/[a-zA-Z0-9-_-]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv|rtf|doc|txt)$/')) {
        sort($files);
        echo '<ul class="downloads">';
        foreach($files as $filename) {
            echo '<li><a href="'.$plxMotor->urlRewrite('?download/'.plxEncrypt::encryptId($dir.$filename)).'">'.$filename.'</a></li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>

    Hello,
    Quelles modifications à faire pour ajouter en ko le poids du fichier à télécharger ?

    Merci
  • StéphaneStéphane Member, Former PluXml Project Manager
    Et voila, avec l'affichage de la taille des fichiers
    <?php
    global $plxMotor;
    # Nom du sous-dossier contenant les fichiers à télécharger dans /data/medias/
    $dir = 'downloads/';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance(PLX_ROOT.$plxMotor->aConf['medias'].$dir);
    if ($files = $glob->query('/[a-zA-Z0-9-_-]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv|rtf|doc|txt)$/')) {
        sort($files);
        echo '<ul class="downloads">';
        foreach($files as $filename) {
            $fsize = plxUtils::formatFilesize(filesize(PLX_ROOT.$plxMotor->aConf['medias'].$dir.$filename));
            echo '<li><a href="'.$plxMotor->urlRewrite('?download/'.plxEncrypt::encryptId($dir.$filename)).'">'.$filename.'</a> ('.$fsize.')</li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>

    Consultant PluXml

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

  • Stéphane a écrit:
    Et voila, avec l'affichage de la taille des fichiers
    <?php
    global $plxMotor;
    # Nom du sous-dossier contenant les fichiers à télécharger dans /data/medias/
    $dir = 'downloads/';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance(PLX_ROOT.$plxMotor->aConf['medias'].$dir);
    if ($files = $glob->query('/[a-zA-Z0-9-_-]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv|rtf|doc|txt)$/')) {
        sort($files);
        echo '<ul class="downloads">';
        foreach($files as $filename) {
            $fsize = plxUtils::formatFilesize(filesize(PLX_ROOT.$plxMotor->aConf['medias'].$dir.$filename));
            echo '<li><a href="'.$plxMotor->urlRewrite('?download/'.plxEncrypt::encryptId($dir.$filename)).'">'.$filename.'</a> ('.$fsize.')</li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>

    Super !

    Merci
    :)
  • jol5926jol5926 Member
    janvier 2018 modifié
    Hello,
    J'utilise le script ci-dessus pour des fichiers pdf.
    Tout fonctionne bien mais j'aimerais une autre manière de fonctionner.
    Avec le script, le fichier pdf est d'abord téléchargé puis ouvert avec le lecteur de fichiers pdf.
    1. J'aurais aimé ouvrir le fichier pdf directement dans le navigateur sans qu'il soit téléchargé, est-ce possible ??
    2. Est-il possible d'ajouter un compteur de téléchargement à ce script ?



    Merci

    Jol
  • Utilise la balise "Object"
  • AndreaAndrea Member

    Merci @Stéphane pour cette portion de code qui fonctionne encore mais apparemment que si la réécriture d'URL est activée ?

    https://forum.pluxml.org/discussion/comment/55685/#Comment_55685

    global $plxMotor;
    # Nom du sous-dossier contenant les fichiers à télécharger dans /data/medias/
    $dir = 'downloads/';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance(PLX_ROOT.$plxMotor->aConf['medias'].$dir);
    if ($files = $glob->query('/[a-zA-Z0-9-_-]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv|rtf|doc|txt)$/')) {
    sort($files);
    echo '<ul class="downloads">';
    foreach($files as $filename) {
    echo '<li><a href="'.$plxMotor->urlRewrite('?download/'.plxEncrypt::encryptId($dir.$filename)).'">'.$filename.'</a></li>';
    }
    echo '</ul>';
    }
    else echo "Aucun document";

    Est-ce que quelqu'un connait la modification à faire pour l'utiliser même si cette option est désactivée ?

    PS: testé avec PluXml 5.8.18 et PHP 8.2.17

  • 21 févr. modifié

    Bonsoir,

    pour moi, version 5.8.18 depuis le repo (5.8.18+), Apache, PHP 7.3.2et 8.3.4 , urlRewriting ou pas = la page n'existe pas + erreur sur preg_match

    Peut-être un soucis avec la regex ? @bazooka ?

    Car dans la fonction sendTelechargement($cible) de plxMotor,en modifiant la ligne 1090 :

        # On lance le téléchargement et on check le répertoire medias
            if(file_exists($file) AND preg_match('#^'.str_replace('\\', '#', realpath(PLX_ROOT.$this->aConf['medias']).'#'), str_replace('\\', '#', realpath($file)))) {
    

    avec un delimiter ~ au lieu de #

            # On lance le téléchargement et on check le répertoire medias
            if(file_exists($file) AND preg_match('#^'.str_replace('\\', '~', realpath(PLX_ROOT.$this->aConf['medias']).'#'), str_replace('\\', '~', realpath($file)))) {
    

    tout semble rentrer dans l'ordre.

    Tester avec le script( remanié pour l'appel de la class plxMotor) , avec ou sans urlRewriting, en m'assurant que j'ai bien des fichiers dans le dossier que je cible.

        # Nom du sous-dossier contenant les fichiers à télécharger dans /data/medias/
        $dir = '/';// inserer ici un nom de dossier existant dans votre dossier 'medias' 
        # Récupération et affichage de la liste des fichiers sous forme de liste
        $glob = plxGlob::getInstance(PLX_ROOT.$this->plxMotor->aConf['medias'].$dir);
        if ($files = $glob->query('/[a-zA-Z0-9-_-]+.(jpg|gif|webp|png|zip|rar|txt|pdf|epub|mp3|flv|rtf|doc|txt)$/')) {
            sort($files);
            echo '<ul class="downloads">';
            foreach($files as $filename) {
                echo '<li><a href="'.$this->plxMotor->urlRewrite('index.php?download/'.plxEncrypt::encryptId($dir.$filename)).'">'.$filename.'</a></li>';
            }
            echo '</ul>';
        }
        else echo "Aucun document";

    P.S.

    • extensions webp et epub ajoutées
    • pensez à remettre la liste à jour des extensions(fichiers) que vous voulez partager.


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    Ce n'est pas un souci avec Regex mails avec Windows !!!
    Il y a une erreur typo avec la fonction sendTelechargement(). Il faut écrire comme ceci :

    $query = '#^' . str_replace('\\', '/', realpath(PLX_ROOT . $this->aConf['medias'])) . '\b#';
    if(file_exists($file) AND preg_match($query, str_replace('\\', '/', realpath($file)))) {
        # ...
    }

    Pour plus de clarté, j'ai isolé l'expression régulière (regex) dans la variable $query. Plus rajout de la limite de mot \b

    Veuillez noter que dans la vraie vie sur Internet, cette erreur n'arrive jamais.
    Elle ne se produit que pour ceux qui testent leur site Internet sur leur PC avec Windows !!!
    Contrairement à Internet, aux URLs, à Linux, ... qui utilisent le caractère '/' pour séparer les noms de dossiers dans le chemin d'accès aux fichiers, Windows utilise le caractère anti-slash '\' . Ce qui engendre des problèmes.

  • @bazooka07 ,
    si cette regex est uniquement destinée à windows, elle me semble probablement inutile, le test sur l'existence du fichier suffirait. .

    cdt


    Cordialement,
    gcyrillus , simple membre du forum et utilisateur de pluxml

    Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
    Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

  • AndreaAndrea Member

    Encore merci @gcyrillus-nomade cette nouvelle portion de code "marche" bien chez free.fr (avec php 5.6.34 et PluXml 5.8.9) et notre serveur (avec php 8.2.17 et PluXml 5.8.18)

    PS: précédemment dit une bétise ;) en tout cas aujourd'hui pas de soucis avec la portion de code @Stéphane chez free.fr (sans la réécriture d'URL)
    aucune idée du pourquoi du comment...

  • AndreaAndrea Member

    Effectivement @bazooka07 j'avais également essayé "vite fait" en local sous Windows et PHP 8.1.11

    Par curiosité ;) je vais recommencer en suivant votre suggestion. Merci

  • bazooka07bazooka07 PluXml Lead Developer, Moderator

    @gcyrillus-nomade
    C'est le str_replace qui ne sert qu'à Windows.
    Donc effectivement si on pouvait supprimer Windows des ordinateurs, cela ferait un souci en moins :p
    Le regex est une sécurité contre les hackers. Le cryptage des noms ou chemin d'accès aux fichiers est très faible et réversible.
    Sans cette regex, un hacker peut demander à télécharger après cryptage un fichier comme ceci : "../../etc/password" ou autre fichier sensible.
    Le bug était déjà présent dans la release 5.8.9

Connectez-vous ou Inscrivez-vous pour répondre.