maj 5.3: la page téléchargements ne fonctionne plus

cpalocpalo Member
février 2014 modifié dans Entraide
Bonjour

sur mes deux sites ici et ici
depuis le passage en 5.3, les liens des documents à téléchargement ne fonctionnent plus alors que je n'ai rien modifié dans le fichier du template de page download.
[== PHP ==]
<?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|css|js|mp3|flv)$/'))
            {
                natsort($files);
                echo '<ul class="telechargements">';
                foreach($files as $filename)
                {
                    $encrypt = $dir.'/'.$filename;
                    $file = $dir.'/'.$filename;
                    $taille = filesize($file);
                   
                    if ($taille >= 1073741824) 
                    {
                        $size = number_format($taille / 1073741824, 1, ',', ' ');                       
                        echo '<li><a href="';
                        $desc = str_replace('_',' ',$filename);
                        echo '">'.$desc.'</a> ('.$size.'&nbspGo)</li>';
                        #$plxShow->urlRewrite($encrypt);
                        #echo '">'.$filename.'</a> ('.$size.'&nbspGo)</li>'; 
                    }
                        elseif ($taille >= 1048576) 
                        {  
                            $size = number_format($taille / 1048576, 1, ',', ' ');
                            echo '<li><a href="';
                            $desc = str_replace('_',' ',$filename);
                            echo '">'.$desc.'</a> ('.$size.'&nbspMo)</li>';
                            #$plxShow->urlRewrite($encrypt);
                            #echo '">'.$filename.'</a> ('.$size.'&nbspMo)</li>';
                        }
                            elseif ($taille >= 1024) 
                            {  
                                $size = number_format($taille / 1024, 0, ',', ' ');
                                echo '<li><a href="';
                                $desc = str_replace('_',' ',$filename);
                                echo '">'.$desc.'</a> ('.$size.'&nbspKo)</li>';
                               # $plxShow->urlRewrite($encrypt);
                               # echo '">'.$filename.'</a> ('.$size.'&nbspKo)</li>';
                            }
                                else 
                                {  
                                    $size = number_format($taille, 1, ',', ' ');
                                    echo '<li><a href="';
                                    $desc = str_replace('_',' ',$filename);
                                    echo '">'.$desc.'</a> ('.$size.'&nbspKo)</li>';
                                    #$plxShow->urlRewrite($encrypt);
                                    #echo '">'.$filename.'</a> ('.$size.'&nbspKo)</li>';
                                }
                }
            }
    
             # Nom des sous-dossiers, si applicable, par rapport à $dir (ajouter un / devant le nom)
            $sousdir = array('/scripts');
            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|css|js|mp3|flv)$/')) {
                        natsort($files);
                        echo '<ul class="telechargements_sdir">';
                         foreach($files as $filename)
                        {
                            $encrypt = $dir.'/'.$filename;
                            $file = $dir.'/'.$filename;
                            $taille = filesize($file);
                   
                            if ($taille >= 1073741824) 
                            {
                                $size = number_format($taille / 1073741824, 1, ',', ' ');                       
                                echo '<li><a href="';
                                $desc = str_replace('_',' ',$filename);
                                echo '">'.$desc.'</a> ('.$size.'&nbspGo)</li>';
                                #$plxShow->urlRewrite($encrypt);
                                #echo '">'.$filename.'</a> ('.$size.'&nbspGo)</li>'; 
                            }
                                elseif ($taille >= 1048576) 
                                {  
                                    $size = number_format($taille / 1048576, 1, ',', ' ');
                                    echo '<li><a href="';
                                    $desc = str_replace('_',' ',$filename);
                                    echo '">'.$desc.'</a> ('.$size.'&nbspMo)</li>';
                                    #$plxShow->urlRewrite($encrypt);
                                    #echo '">'.$filename.'</a> ('.$size.'&nbspMo)</li>';
                                }
                                    elseif ($taille >= 1024) 
                                    {  
                                        $size = number_format($taille / 1024, 0, ',', ' ');
                                        echo '<li><a href="';
                                        $desc = str_replace('_',' ',$filename);
                                        echo '">'.$desc.'</a> ('.$size.'&nbspKo)</li>';
                                        #$plxShow->urlRewrite($encrypt);
                                        #echo '">'.$filename.'</a> ('.$size.'&nbspKo)</li>';
                                    }
                                        else 
                                        {  
                                            $size = number_format($taille, 1, ',', ' ');
                                            echo '<li><a href="';
                                            $desc = str_replace('_',' ',$filename);
                                            echo '">'.$desc.'</a> ('.$size.'&nbspKo)</li>';
                                            #$plxShow->urlRewrite($encrypt);
                                            #echo '">'.$filename.'</a> ('.$size.'&nbspKo)</li>';
                                        }
                        }
                        echo '</ul></li>';
                    }
                    else echo '<ul class="telechargements_sdir"><li>Aucun document</li></ul></li>';
                    endif;
                }
            }
            if (is_array($files)) {
                echo '</ul>';
            }
            ?>

Réponses

  • Jerry WhamJerry Wham Member
    février 2014 modifié
    Après
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|txt|pdf|css|js|mp3|flv)$/')){
    
    fais un print_r de $files
    echo '<pre>';print_r($files);exit('<pre>');
    
    Et copie/colle ici le résultat.

    EDIT : le script fonctionne sur le site de l'asso... Tu es sûr de n'avoir pas fait d'erreur sur le premier ???
  • Bonsoir

    la page téléchargements du site d el'association (liens vers Des documents ) dans la sidebar, tous les documents à télécharger ne le sont pas. Et dans le dossier téléchargements j'ai un e4° rubrique avec un document qui n'apparait pas.
    J'ai vérifié avec filezilla le contenu du dossier téléchargements e: le s4 sous-dossiers et les documents y sont bien
  • Le print_r affiche:

    Array
    (
    [0] => Charte_ergonomique_v2.0_2.pdf
    )
  • Bonjour

    Une question préalable avant de reprendre le travail pour corriger cette erreur.

    Initialement on a dans configuration avancée : data/documents/
    Si je veux créer un dossier pour les documents à télécharger "downloads", quelle est la meilleure configuration:

    je conserve la configuration initiale ( /data/documents/) et je crée : documents/downloads

    Ou bien je modifie la configuration avancée pour l'emplacement des documents en : /data/
    les documents vont alors se retrouver en /data/documents et data/downloads
  • Bonjour

    J'ai repris mes scripts...
    dans mon site de test ( je n'ai pas encore remis en ligne.. la page fonctionne presque sauf pour un document word qui apparaît bien dans la liste)
    Pour mon site en ligne j'ai refais une page de téléchargements simplifiée sans sous-dossiers
    Voir l'exemple
    où telechargements est un sous-dossier de data/documents
    dossier%20telechargements.jpg
    et le code correspondant
    [== PHP ==]
    <?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|doc|docx|pdf|css|js|mp3|flv)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
            $encrypt = str_replace('/','',$sousdir).'/'.$filename;
            $file = $dir.'/'.$filename;
            $desc = str_replace('_',' ',$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 '">'.$desc.'</a> ('.$size.'Ko)</li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    
    Les fichiers s'affichent bien.
    Mais lorsqu'on clique dessus, message d'erreur:
    "La page que vous avez demandé n'existe pas
    Le document spécifié est introuvable"
    La seule exception est pour le document: Charte ergonomique , qui est un pdf mais la doc Pluxml qui est aussi un pdf ne s'affiche pas.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Essaye avec ce code
    <?php
    $plxShow = plxShow::getInstance();
    # Dossier des documents paramétré dans PluXml
    $dir = PLX_ROOT.$plxShow->plxMotor->aConf['documents'];
    # Nom du sous-dossier contenant les fichiers disponibles au téléchargement
    $subdir = 'telechargements/'; # avec un / à la fin
    # Récupération et affichage de la liste des fichiers sous forme de liste
    $glob = plxGlob::getInstance($dir.$subdir);
    if ($files = $glob->query('/[a-z0-9-_]+.(jpg|gif|png|zip|rar|txt|doc|docx|pdf|css|js|mp3|flv)$/')) {
        echo '<ul class="telechargements">';
        foreach($files as $filename) {
    		$url =  $plxShow->plxMotor->urlRewrite('?telechargement/'.plxEncrypt::encryptId($subdir.$filename));
    		echo '<li><a href="'.$url.'">'.$filename.'</a> ('.plxUtils::formatFilesize(filesize($dir.$subdir.$filename)).')</li>';
        }
        echo '</ul>';
    }
    else echo "Aucun document";
    ?>
    

    Consultant PluXml

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

  • Il ne m'affiche plus que charte ergonomique
  • StéphaneStéphane Member, Former PluXml Project Manager
    essaye des noms de fichiers sans espace

    Consultant PluXml

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

  • cpalocpalo Member
    février 2014 modifié
    Je viens d'essayer mais cela ne change rien.
    Je reprendrai tout à l'heure à zéro en repartant de mon site de développement ici étape par étape, et en reprenant le post initial.
    Sur mon site de développement, seul le document itinéraire chef de projet ne s'affiche pas.

    code de la page downloads de mon site de développement
    [== PHP ==]
    <?php
                    global $plxShow;
                    # Nom du dossier fichiers à renseigner
                    $dir = 'data/documents/downloads'; 
                    $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|doc|docx|pdf|css|js|mp3|flv)$/')) {
                        natsort($files);
                        echo '<ul class="downloads">';
                        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('/categorie1','/categorie2','/scripts','/tutoriels');
                    if (!empty($sousdir)){
                        natsort($sousdir);
                        if (empty($files)) {
                        echo '<ul class="downloads">';
                        }
                        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||doc|docx|pdf|css|js|pdf|mp3|flv)$/')) {
                                natsort($files);
                                echo '<ul class="downloads_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="downloads_sdir"><li>Aucun document</li></ul></li>';
                            endif;
                        }
                    }
                    if (is_array($files)) {
                        echo '</ul>';
                    }
                    ?>
    

    Je te tiens au courant

    Merci
  • StéphaneStéphane Member, Former PluXml Project Manager
    ton fichier itinéraire de chef ne fonctionnne pas car son url est:

    http://xxxxxxxx/data/documents/downloads/categorie2/Itineraire_chef_de# projet_multimedia.doc

    vérifie le nom du fichier. là il y a un probleme: Itineraire_chef_de# projet_multimedia.doc

    Consultant PluXml

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

  • cpalocpalo Member
    février 2014 modifié
    J'ai modifié le nom en itineraire_chef_de_projet_multimedia.doc ( c'est à dire en remplaçant tous les "blancs" par des "_" et en racourcissant le nom, et là ça fonctionne.
    A voir maintenant sur mon autre site, avec une version simplifié de "telechargements", où ça bloque..;

    Et dans ce topic, post 7
    http://forum.pluxml.org/viewtopic.php?id=1504
    tu indiquais bien que si on téléchargeait par FTP, il fallait seulement des minuscules, chiffres ou _ comme caractères dans les noms de fichiers.... autant pour moi!! surtout que je n'ai pas pour habitude de nommer mes documents avec des espaces!!!
  • J'ai repris tous les fichiers que j'avais mis en test à télécharger en écrivant "correctement" leur nom.
    Sur mes deux sites j'ai mis exactement les mêmes dossiers.
    Et là tout fonctionne, que ce soit avec le script initial ou celui de Stéphane d'aujourd'hui.

    J'ai mon point de départ pour continuer ( ce qui existait initialement):
    - formater la taille du fichier et le nom du fichier
    - insérer des sous-dossiers de téléchargements
    - tester (mais pas impératif) que le dossier téléchargements ne soit pas un sous-dossier de documents mais un dossier de même niveau ( data/telechargements)
Connectez-vous ou Inscrivez-vous pour répondre.