Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonction header(content-type...) php

avec divers fichiers dans un dossier, aux noms différents

Sujet résolu
    22 juillet 2018 à 19:30:34

    Bonjour,

    Voici le nouveau soucis que j'ai :

    Dans mon espace client, je cherche à sécuriser les données clients ( factures / devis ) qui sont dans des dossiers aux noms de leur ID utilisateur.
    ce qui donne un dossier type :

    membres/[id]/factures/
    ou

    membres/['id']/devis/

    à l'intérieur, se trouvent les devis et factures dans les dossiers respectifs, les fichiers fichiers commencent par facture ou devis suivi d'un numéro spécifique, de type :

    facture-{n°facture}

    je passe par un scandir sur les pages factures.php et devis.php afin de récupérer la liste des fichiers à l'intérieur :

    <?php
    if(isset($_SESSION['id'])){
                                
                            
                                                  
                            $file= scandir('membres/' . $_SESSION['id'] . '/factures/');
                                                    
                            $items_count = count($file);
                            if ($items_count <= 2)
                            {
                                $empty = true;
                                echo '<li class="cross"><a>Vous n\'avez actuellement aucun factures dans votre espace client </a></li>';
                            }
                            else {
                            foreach($file as $file) {
                            $_GET['file'] = $file;
                            
                            ?>
                            
                            <li class="pdf"><a  href="<?php  if ($file != '' && $file != '.' && $file != '..' && $file != 'index.php' && $file != '.htaccess') { echo 'showfacture.php';?>"><?php echo $file; ?></a></li>
                            <?php
                                        }
                                    }
                                }
                            }
                            ?>

    ce qui fait donc que le "echo" renvoie donc vers un fichier "showfacture.php"

    hors c'est là que je bloque,
    mon scandir liste très bien les fichiers, ce n'est pas un soucis, mais ce que je n'arrive pas à faire, c'est afficher le fichier que je veux, tout en passant par un

    header('Content-Type: application/pdf');


    pour le fichier showfacture.php j'ai tenté ça :

    <?php
    session_start();
    if (!isset($_SESSION['id'])) { 
        header('Location: connexion.php');
        exit;
    } 
                          
    else{
        $file= scandir('membres/' . $_SESSION['id'] . '/factures/');  
        foreach($file as $file);  
        $_GET['file'] = $file;    
        header('Content-Type: application/pdf');
        header($file);
        }
    ?>

    mais bien sûr ça n'affiche rien.

    Si par hasard vous avez une idée, je suis tout ouïe.

    Merci



    • Partager sur Facebook
    • Partager sur Twitter
      22 juillet 2018 à 20:10:23

      Bonsoir,

      Il y a un problème dans tes foreach. Fais attention à la syntaxe et renomme correctement tes variables. Le nom du tableau que tu veux parcourir doit être différent du nom de la variable qui te permet d'accéder aux éléments du tableau.

      Pourquoi fais-tu un lien qui renvoie vers une autre page php pour afficher un fichier PDF ? Tu peux indiquer tout simplement dans le href du lien le path du fichier PDF et lorsque quelqu'un cliquera sur ce lien, le fichier PDF s'affichera dans le navigateur :

      <a href="<?php echo $file;?>">...</a>



      • Partager sur Facebook
      • Partager sur Twitter
      Une question bien formulée, c'est 50% de la réponse.
        22 juillet 2018 à 20:28:34

        purpaly a écrit:

        Bonsoir,

        Il y a un problème dans tes foreach. Fais attention à la syntaxe et renomme correctement tes variables. Le nom du tableau que tu veux parcourir doit être différent du nom de la variable qui te permet d'accéder aux éléments du tableau.

        Pourquoi fais-tu un lien qui renvoie vers une autre page php pour afficher un fichier PDF ? Tu peux indiquer tout simplement dans le href du lien le path du fichier PDF et lorsque quelqu'un cliquera sur ce lien, le fichier PDF s'affichera dans le navigateur :

        <a href="<?php echo $file;?>">...</a>




        Bonsoir merci pour la réponse,

        Enfait que le facture soit affichée par la page showfacture.php via un header, histoire de sécurité ... sinon oui ça marche par le echo $file, mais le fait qu'on puisse modifier l'url me dérange, ça permettrait de récupérer les fichiers des autres utilisateurs ( même si c'est rare de tomber sur les fichiers autres, ça peut arriver...
        • Partager sur Facebook
        • Partager sur Twitter
          22 juillet 2018 à 22:10:42

          Ok. Le fichier showfactures.php peut être utile alors pour reconstruire le chemin du fichier avant de l'afficher. Mais il faut quand même se débrouiller pour faire passer le nom du fichier à ouvrir.

          Si je reprends un peu ton code, en passant par GET pour récupérer le fichier, ça donnerait :

          session_start();
          if(isset($_SESSION['id'])){                   
              $files= scandir('membres/' . $_SESSION['id'] . '/factures/');
                                                           
              $items_count = count($files);
              if ($items_count <= 2)
              {
                  $empty = true;
                  echo '<li class="cross"><a>Vous n\'avez actuellement aucun factures dans votre espace client </a></li>';
              }
              else {
                  foreach($files as $file) {
          ?>
                   <li class="pdf"><a  href="<?php  if ($file != '' && $file != '.' && $file != '..' && $file != 'index.php' && $file != '.htaccess') { echo 'showfacture.php?target='.$file;}?>"><?php echo $file; ?></a></li>
            <?php }
             }
          }

          Du coup dans le lien, on fait passer juste le nom du fichier par l'url, pas son adresse complète :

          echo 'showfacture.php?target='.$file;

          Et pour afficher ce fichier dans showfacture.php :

          <?php
          session_start();
          if (!isset($_SESSION['id'])) {
          	header('Location: connexion.php');
          	exit ;
          } else {
          	if (isset($_GET["target"])) {
          		//on recupere le nom complet du fichier a afficher
          		$filename = 'membres/' . $_SESSION['id'] . '/factures/' . $_GET["target"];
          		header('Content-Type: application/pdf');
          		//on lit le fichier
          		readfile($filename);
          		exit ;
          	}
          }
          

          Il y aurait moyen de transmettre le nom du fichier sans passer par l'url, en utilisant la méthode POST plutôt que GET. Mais pour ça, ou il faut faire plein de petits formulaires avec un champ caché pour le fichier et un bouton submit pour envoyer (méthode pas super pour la structure HTML), ou utiliser AJAX pour envoyer une requête à la page showfacture.php avec le nom du fichier.

          Voilà ça peut te donner des idées.



          • Partager sur Facebook
          • Partager sur Twitter
          Une question bien formulée, c'est 50% de la réponse.
            22 juillet 2018 à 22:32:42

            Je te remercie, 

            J'avais fait un truc du genre mais sans target, je pense que ça devrait fonctionner comme ça, 

            Je te redis des que je test

            EDIT: Parfait !

            Merci mille fois !

            -
            Edité par MiNiMan.8.6 22 juillet 2018 à 22:37:41

            • Partager sur Facebook
            • Partager sur Twitter

            fonction header(content-type...) php

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown