Page statique de téléchargement

24

Réponses

  • antistressantistress Member
    juin 2010 modifié
    j'ai combiné les codes donnés sur ce fil et j'arrive à cette ligne
    <code>echo '<li><a href="'.$file.'">' . str_replace($dir, '', $filename) . '</a> ('.$size.' <acronym title="mébioctets">Mio</acronym>)</li>';</code>
    pour afficher le nom de mes fichiers hyperliés avec leur chemin en clair (qui apparait dans les balises audio/vidéo HTML5 de toute façon), et leur taille
    Mais l'ordre alphabétique est inversé

    Une idée pour le rétablir ?

    Merci

    La page correspondante : http://libre-ouvert.toile-libre.org/?static10/
  • bonsoir
    je n'arrive pas à utiliser le script pour la v5, les fichiers ne se téléchargent pas, le lien de dl me renvoie vers la page d'accueil... un souci de rewriting?? (que j'ai activé)

    de plus, j'aimerai pouvoir lister des répertoires, qui en cliquant dessus me permettrait de lister leur contenu... possible?

    enjoy
  • je fais un petit UP de 10h :)
  • StéphaneStéphane Member, Former PluXml Project Manager
    de quel script s'agit-il ?

    Consultant PluXml

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

  • Salut Stéphane,

    Je parlai du script de téléchargement de fichier contenu dans un dossier
    http://wiki.pluxml.org/?page=creer_une_page_de_fichiers_a_telecharger

    mon dossier est "data/sourceTV/"

    d'ailleurs, j'aimerai pouvoir lister les sous-répertoires de ce dossier, lesquels contiennent les fichiers intéressant.

    enjoy et merci d'avance
  • StéphaneStéphane Member, Former PluXml Project Manager
    peux-tu essayer ce code stp
    <?php
    global $plxShow;
    # Nom du dossier fichiers à renseigner
    $dir = 'data/documents';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($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="';
            $plxShow->urlRewrite('?telechargement/'.plxEncrypt::encryptId($filename));
            echo '">'.$filename.'</a></li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    
    pour les sous dossiers c'est plus compliqué à faire. pas trop le temps en ce moment. si quelqu'un a le temps de faire une petite fonction récursive...

    Consultant PluXml

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

  • super_g2super_g2 Member
    août 2010 modifié
    Fatal error: Call to a member function urlRewrite() on a non-object in /var/www/site/data/statiques/016.source-tv.php on line 11

    voici mon code :
    <?php
    # Nom du dossier images à renseigner
    $dir = 'data/sourceTV';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir);
    if ($files = $glob->query('/[a-z0-9-_]+.(dem.bz2)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $file = $dir.'/'.$filename;
            echo '<li><a href="';
            $plxShow->urlRewrite('?telechargement/'.plxEncrypt::encryptId($filename));
            echo '">'.$filename.'</a></li>';
        }
        echo '</ul>';
    }
    else echo "Aucune SourceTV pour le moment, va falloir faire des matchs les gars !";
    ?>
    
    quand je regarde le code, il y a comme une erreur dans le premier echo ;)
  • StéphaneStéphane Member, Former PluXml Project Manager
    tu as oublié de copier la ligne en dessous de <?php
    global $plxShow;
    

    Consultant PluXml

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

  • super_g2super_g2 Member
    août 2010 modifié
    oups

    http://srpulz.fr/static16/source-tv
    document introuvable :)

    tiens, ça me fait penser que je mettrai le thème dans les ressources ;)


    EDIT : j'ai un petit souci DNS, je ne sais pas si vous allez pouvoir voir le site...
    je fais au plus vite, mais ça n'empêche rien xD
  • juste pour info, mon souci DNS est résolu, le temps que ça repropage ;)
    sinon, des idées pour scanner des répertoires et leur contenu?

    vous voyez l'idée? un accès presque identique à un webftp dans l'aspect téléchargement.
  • super_g2super_g2 Member
    août 2010 modifié
    bon, j'ai presque réussi, via une ou 2 fonctions extérieures à pluxml...

    je vous donnerai ça après, une fois les test finis ;)

    enjoy
  • super_g2super_g2 Member
    octobre 2010 modifié
    alors, tuto :
    Avant tout, sachez que je vais utiliser des fonctions non "plx", mais je pense que (si j'avais eu plus de temps) les fonctions précédemment exposées dans ce topic peuvent être appliquées...

    tout d'abord, il faut télécharger ce package : http://leboi.jeremy.free.fr/FTP/forum/pluxml/webftp.zip
    le décompresser à la racine de votre installation pluxml, dans un dossier que vous appellerez "addons".

    ensuite, créer une page statique avec ce contenu :
    <?php
    $REP="data/dossier.a.scanner/";
    include('addons/webftp/fonctions.php');
    
    if(isset($_GET['dossier'])) {
    	$dossier=$_GET['dossier'];
    	echo "<p style=\"float:right;\"><a href=\"staticXX/webftp/\"><img src=\"addons/webftp/Images/rep.gif\"> WebFTP</a>/".$dossier."<br /><br /></p>";
    	echo "Liste des fichiers du dossier $dossier.<br /><br /><br /><br />";
    
    	$listfile= ListFile($REP.$dossier, "pps|jpg|bmp|gif|mp3|exe|msi|reg|rar|zip|avi|mpg|mpeg|mkv|wmv|doc|xls|pdf|ini|ppt|html|txt|mov|wav|gz|ts|cfg|res|srt") ; 
    	if (!empty($listfile)) {
    		foreach ($listfile as $file) {
    			$file_ext = strtolower(substr(strrchr($file,"."),1));
    			if (in_array($file_ext, array("jpg", "gif", "jpeg", "bmp", "exe", "msi", "reg", "rar", "zip","doc", "xls", "pdf", "ini", "ppt", "html", "txt", "gz", "cfg", "res", "pps", "srt", "7z", "mp3", "wav", "avi", "wmv", "mpg", "mpeg", "mkv", "mov", "ts"))) {
    				echo "<img src=\"addons/webftp/Images/$file_ext.gif\">&nbsp<a href=\"$REP$dossier/$file\" target=\"_blank\">".$file."</a><br><br>";
    			} else {
    				echo "<img src=\"addons/webftp/Images/no.gif\">&nbsp<a href=\"$REP$dossier/$file\" target=\"_blank\">".$file."</a><br><br>";
    			} 
    		}
    	} else {
                     echo "Dossier vide.";
            }
    } else {
    	echo "<p>Veuillez sélectionner un dossier.<br /><br /></p>";
    	$listedir = ListDir($REP, $sort=1);
            foreach ($listedir as $name) {
    			echo "<div class=\"menuitem\"><img src=\"addons/webftp/Images/rep.gif\"/>&nbsp<a href=\"staticXX/webftp/&dossier=$name\" >".$name."</a></div>";
            } 
    }
    ?>
    
    Vous devez changer la première ligne en mettant le dossier à scanner, et changer les numéros de la page statique..

    si souci, dites moi ^^
  • Euh , moi j'ai un problème .
    Il revoie une erreur 404 pour tous les dossiers et fichiers ...
    Merci pour vos future réponse .
  • Bonsoir,

    Le script initial est buggué si on utilise un sous dossier. Voici le script corrigé.
    <?php
    global $plxShow;
    # Nom du dossier fichiers à renseigner
    $dir = 'data/documents';
    # Nom du sous-dossier, si applicable, par rapport à $dir (ajouter un / devant le nom)
    $sousdir = '/telechargements';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir.$sousdir);
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $encrypt = str_replace('/','',$sousdir).'/'.$filename;
            $file = $dir.'/'.$filename;
            echo '<li><a href="';
            $plxShow->urlRewrite('?telechargement/'.plxEncrypt::encryptId($encrypt));
            echo '">'.$filename.'</a></li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    
    Merci à Stéphane F pour l'astuce du début.
  • termicastortermicastor Member
    juillet 2011 modifié
    Bonsoir ! :)
    Merci à tous pour ce travail, et à jerry wham pour la correction du script. :D

    Il y a une chose que je n'arrive cependant pas à faire, c'est adapter le système pour donner la taille des fichiers, à ce script corrigé.
    J'ai donc fait ça :
    <?php
    global $plxShow;
    # Nom du dossier fichiers à renseigner
    $dir = 'data/documents';
    # Nom du sous-dossier, si applicable, par rapport à $dir (ajouter un / devant le nom)
    $sousdir = '/p1';
    
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir.$sousdir);
    
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $encrypt = str_replace('/','',$sousdir).'/'.$filename;        
            $file = $dir.'/'.$filename;
            $size = ceil(filesize($encrypt)/1024);
            echo '<li><a href="';
            $plxShow->urlRewrite('?telechargement/'.plxEncrypt::encryptId($encrypt));
            echo '">'.$filename.'</a> ('.$size.'Ko)</li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    
    Mais ça ne marche pas, et me sort tout un galimatias de :
    Warning: filesize() [function.filesize]: stat failed for p1/fichier.pdf in emplacement/du/fichier/ on line 16
    
    Comment résoudre cela ?

    Merci beaucoup ! :D
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Essaye ça (j'ai pas du tout testé)
    <?php
    global $plxShow;
    # Nom du dossier fichiers à renseigner
    $dir = 'data/documents/';
    # Nom du sous-dossier, si applicable, par rapport à $dir (ajouter un / devant le nom)
    $sousdir = 'p1/';
    
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir.$sousdir);
    
    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.'/'.$sousdir.'/'.$filename;
            $size = ceil(filesize($file)/1024);
            echo '<li><a href="';
            $plxShow->urlRewrite('?telechargement/'.plxEncrypt::encryptId($file));
            echo '">'.$filename.'</a> ('.$size.'Ko)</li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    

    Consultant PluXml

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

  • Salut ! :)
    Merci pour ton aide ! :D

    Bon, ça ne marche pas, je retrouve le problème du "document spécifié introuvable" en essayant de télécharger un fichier.
    Par contre, l'affichage de la taille des fichiers en ko marche. :)
  • Jerry WhamJerry Wham Member
    août 2011 modifié
    C'est normal : $sousdir doit être nommé /p1 et non p1/, sinon il n'y a pas de séparation entre le dossier principal et le sous dossier (dans la focntion glob).

    Voici le script corrigé afin qu'il affiche la taille des fichiers :
    <?php
    global $plxShow;
    # Nom du dossier fichiers à renseigner
    $dir = 'data/documents';
    # Nom du sous-dossier, si applicable, par rapport à $dir (ajouter un / devant le nom)
    $sousdir = '/p1';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir.$sousdir);
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $encrypt = str_replace('/','',$sousdir).'/'.$filename;
            $file = $dir.'/'.$filename;
            $size = ceil(filesize($dir.$sousdir.'/'.$filename)/1024);
            echo '<li><a href="';
            $plxShow->urlRewrite('?telechargement/'.plxEncrypt::encryptId($encrypt));
            echo '">'.$filename.'</a> ('.$size.'Ko)</li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    
  • StéphaneStéphane Member, Former PluXml Project Manager
    modifie cette ligne
    $file = $dir.'/'.$sousdir.'/'.$filename;
    
    en
    $file = $dir.$sousdir.$filename;
    

    Consultant PluXml

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

  • Jerry WhamJerry Wham Member
    août 2011 modifié
    Stéphane a écrit:
    modifie cette ligne
    $file = $dir.'/'.$sousdir.'/'.$filename;
    
    en
    $file = $dir.$sousdir.$filename;
    
    Il faut conserver le slash avant $filename (voir mon script un peu plus haut dans la discussion).
  • Salut ! Merci beaucoup !

    Finalement, j'utilise sur mon site la version de antistress, qui marche très bien, et qui a l'avantage de ne pas masquer les URL des fichiers. Merci à lui aussi ! :D
  • content de voir que ton site est en ligne :-)
  • Bon, moi je suis largué...
    Je suis parti du wiki où le script 5.1+ ne fonctionnait pas.
    J'ai parcouru le topic dans tous les sens, et je ne m'y retrouve dans aucun des scripts proposé: je n'arrive toujours pas plus loin que l'affichage des fichiers, mais avec les cibles des liens qui n'affichent que la page d'accueil (comme super_g2).
    Je n'ai pas réussi à comprendre comment fonctionne le cryptage d'urls, les fonctions sont dans quel(s) fichier(s)?

    Le seul truc fonctionnel que j'ai pu faire c'est une versions sans cryptage de l'url:
    <?php
    global $plxShow;
    # Nom du dossier fichiers à renseigner
    $dir = 'data/documents';
    # Nom du sous-dossier, si applicable, par rapport à $dir (ajouter un / devant le nom)
    $sousdir = '/telechargements';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir.$sousdir);
    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.$sousdir.'/'.$filename;
          $size = ceil(filesize($file)/1024);
          echo '<li><a href="'.$file.'">'.$filename.'</a> ('.$size.'Ko)</li>';
    
    #      $encrypt = str_replace('/','',$sousdir).'/'.$filename;
    #      echo '<li><a href="';
    #      $plxShow->urlRewrite('?telechargement/'.plxEncrypt::encryptId($encrypt));
    #      echo '">'.$filename.'</a> ('.$size.'Ko)</li>';
    
       }
       echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    
    Si quelqu'un peu m'éclairer sur le fonctionnement du cryptage... j'en serais ravi :)
  • l e . n o xl e . n o x Member
    décembre 2011 modifié
    Bonsoir,

    @Victor : ceci fonctionne avec ma config (Pluxml 5.1.5)
    <?php
    
    global $plxShow;
    # Nom du dossier fichiers à renseigner
    $dir = 'data/documents';
    
    # Nom du sous-dossier, si applicable, par rapport à $dir (ajouter un / devant le nom)
    #$sousdir = '/telechargements';
    
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir.$sousdir);
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|gz|7z|txt|pdf|mp3|flv)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $encrypt = str_replace('/','',$sousdir).'/'.$filename;
            $file = $dir.'/'.$filename;
    	$size = ceil(filesize($file)/1024);
            echo '<li><a href="';
            $plxShow->urlRewrite('?telechargement/'.plxEncrypt::encryptId($encrypt));
    	echo '<li><a href="'.$file.'">'.$filename.'</a> ('.$size.'Ko)</li>';
        }
    
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    
    
  • shamanshaman Member
    février 2012 modifié
    Bonjour à tous...

    Je suis en 5.1.4 et les codes me mettent tous "ficher indisponible" alors que pluxml me les liste.

    Le seul code qui fonctionne pour moi est celui sans cryptage de l'URL.

    Je le poste avec une petite modif pour que les PDF s'affichent dans un nouvel onglet.
    ATTENTION, je n'ai laissé que PDF comme extension... à vous de modifier comme pour le nom du sous-dossier...

    Si quelqu'un a une solution pour que le code marche en cryptant l'URL chez tout le monde....


    <?php
    global $plxShow;
    # Nom du dossier fichiers à renseigner
    $dir = 'data/documents';
    # Nom du sous-dossier, si applicable, par rapport à $dir (ajouter un / devant le nom)
    $sousdir = '/fichecapteur';
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir.$sousdir);
    if ($files = $glob->query('/[a-z0-9-_]+.(pdf)$/')) {
    echo '<ul class="telechargements">';
    foreach($files as $filename) {
    $file = $dir.$sousdir.'/'.$filename;
    $size = ceil(filesize($file)/1024);
    echo '<li><a href="'.$file.'" TARGET="_blank">'.$filename.'</a> ('.$size.'Ko)</li>';

    # $encrypt = str_replace('/','',$sousdir).'/'.$filename;
    # echo '<li><a href="';
    # $plxShow->urlRewrite('?telechargement/'.plxEncrypt::encryptId($encrypt));
    # echo '">'.$filename.'</a> ('.$size.'Ko)</li>';

    }
    echo '</ul>';
    }
    else echo "Aucun document";
    ?>
  • je n'utilise pas le cryptage d'url sur ma page, je ne peux t'aider désolé http://libre-ouvert.toile-libre.org/?static10/toutes-les-sequences-audio-video
  • StéphaneStéphane Member, Former PluXml Project Manager
    dans ta boucle foreach affiche le contenu de la variable $file pour controler si les chemins sont corrects par rapport à la racine du site

    Consultant PluXml

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

  • Jerry WhamJerry Wham Member
    juin 2012 modifié
    Voici une petite modif qui permet de séparer les fichiers dans plusieurs dossiers :
    <?php
    global $plxShow;
    # Nom du dossier fichiers à renseigner
    $dir = 'data/documents/telechargements'; 
    $crypt = false;   
    
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir);
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv)$/')) {
        natsort($files);
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $encrypt = $dir.'/'.$filename;
            $file = $dir.'/'.$filename;
            $size = ceil(filesize($dir.'/'.$filename)/1024);
            echo '<li><a href="';
            $plxShow->urlRewrite($encrypt);
            echo '">'.$filename.'</a> ('.$size.'Ko)</li>';
        }
    }
        
    # Nom des sous-dossiers, si applicable, par rapport à $dir (ajouter un / devant le nom)
    $sousdir = array('/themes','/plugins');
    if (!empty($sousdir)){
        natsort($sousdir);
        if (empty($files)) {
        echo '<ul class="telechargements">';
        }
        foreach ($sousdir as $key => $sdir) {
        	if (is_dir($dir.$sdir)) :
            echo '<li><h2>'.ucfirst(str_replace('/','',$sdir)).'</h2>';
            # Récupération et affichage de la liste des fichiers sous forme de liste
            $glob = plxGlob::getInstance($dir.$sdir);
            if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|txt|pdf|mp3|flv)$/')) {
                natsort($files);
                echo '<ul class="telechargements_sdir">';
                foreach($files as $filename) {
                    $encrypt = $sdir.'/'.$filename;
                    $file = $dir.'/'.$sdir.'/'.$filename;
                    $size = ceil(filesize($dir.'/'.$sdir.'/'.$filename)/1024);
                    echo '<li><a href="';
                    $plxShow->urlRewrite($dir.$encrypt);
                    echo '">'.$filename.'</a> ('.$size.'Ko)</li>';
                }
                echo '</ul></li>';
            }
            else echo '<ul class="telechargements_sdir"><li>Aucun document</li></ul></li>';
            endif;
        }
    }
    if (is_array($files)) {
        echo '</ul>';
    }
    ?>
    
    Pour ajouter un dossier à scanner, il suffit d'ajouter son nom dans le tableau $sousdir.

    Le nom des fichiers est en clair (pas d'appel à la classe plxEncrypt) et les dossiers et les fichiers sont classés par ordre alphabétique (utilisation de la fonction natsort).
  • Parfait, j'y suis grâce à ce dernier post enfin arrivé. :)

    Merci et bonjour Jerry (et tout le monde).


    Par contre, à la ligne....


    >.... $sousdir = array('/themes','/plugins');


    J'ai renseigné d'autres répertoires à scanner soit....


    $sousdir = array('data/documents/tracts','data/documents/divers');

    Et ça ne m'affiche que le contenu de data/documents :-//


    Pourquoi ?
  • danielsandanielsan Member
    janvier 2013 modifié
    Hello,


    une autre approche :
    créer un article par fichier à télécharger.
    Ces articles sont regroupés dans une catégorie "téléchargement"


    cela se passe en 2 temps :
    1/ rajout d'un champ "fichier" dans l'article (avec le plugin champArt ) dans lequel mettre l'url du fichier
    2/ création d'un template de catégorie spécifique pour lequel le lien "lire la suite" a été changé en "télécharger" (ce lien récupère celui du champ "fichier".


    Les avantages de cette méthode sont :
    */ qu'on peut écrire un petit texte lié au fichier (grâce au chapô de l'article)
    ou associer une image (création d'un champ "image de fichier")
    */ créer un accès restreint à la catégorie grâce aux plugins lockArticle/privateStatic
    (j'ai modifié ces plugins de manière à rediriger le visiteur vers telle ou telle catégorie en fonction du mot de passe ...)
    */ classer/organiser les fichiers (création de plusieurs catégories etc ...


    ça donne ça :


    zone-dl.jpg


    Encore un exemple de la maléabilité de PluXml ... ;)
    Qu'en pensez-vous ?
Connectez-vous ou Inscrivez-vous pour répondre.