IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Ouvrir un fichier PDF avec la navigateur


Sujet :

Langage PHP

  1. #1
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut Ouvrir un fichier PDF avec la navigateur
    Bonjour,

    Pour commencer, j'ai un lien dans ma page php que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href=\"?cv=en\">cv.en-GB.pdf</a>
    Mon fameux switch case:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    switch ($_GET['cv'])
    {
    case "en":
     
        $file_en="files/~olivier/cv.en-GB.pdf";
        print ("<a href=\"$file_en\">");
     
        break;
    case "fr":
        break;
    }
    ?>
    Je pensais faire simple (cela ne fonctionne pas) mais à priori, c'est un peu plus compliqué. Pouvez-vous m'aiguiller s'il vous plaît ?

    Merci
    .Olivier

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2003
    Messages : 88
    Points : 73
    Points
    73
    Par défaut
    Salut!
    Cet exemple fonctionne, tu peux l'adapter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    // Vous voulez afficher un pdf
    header('Content-type: application/pdf');
     
    // Il sera nommé downloaded.pdf
    header('Content-Disposition: attachment; filename="downloaded.pdf"');
     
    // Le source du PDF original.pdf
    readfile('original.pdf');
    ?>
    A plus!

    Raf
    "On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"

  3. #3
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Merci de ta réponse

    J'avance un peu, j'ai tenté ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    // header
    function head()
    {
        $file_directory=$rep;
        header("filename=$rep");
        header("Content-Type:application/force-download");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");
        header("Content-Disposition:attachment;filename=".basename($rep));
        header("Content-type:application/pdf");
        header("Content-Transfer-Encoding:binary");
        header("Content-Length:".filesize($file_directory));
        readfile("$file_directory");
    }
     
    // pdf
    switch ($_GET['cv'])
    {
    case "en":
        $rep="files/~olivier/cv.en-GB.pdf";
        head();
        break;
    case "fr":
        $rep="files/~olivier/cv.fr-FR.pdf";
        head();
        break;
    }
    Il m'ouvre bien un boîte de téléchargement mais je n'obtiens pas le fichier PDF.

    J'utilise une fonction car sinon je me retrouve avec le message
    headers are already sent
    Une idée ?

    Merki
    .Olivier

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2003
    Messages : 88
    Points : 73
    Points
    73
    Par défaut
    Il me semble un truc sans en être sûr: tu ne peux spécifier qu'un seul Content-Type (je pense que les 3 premiers ne servent à rien).

    Pour ton erreur "headers are already sent ", il faut bien vérifier qu'il n'y a aucune sortie vers le navigateur avant les fonctions header, cela comprend:
    - html
    - echo, print
    - toute ligne vide avant <?php
    Mais tu peux y mettre hors fonction si tu fais gaffe à ça.

    Si tu tiens à utiliser une fonction, il faut que les variables lui soient connues ($rep n'est pas connu dans la fonction):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    // header
    function head($rep)
    {
        header('filename=' . $rep);
        header("Content-Disposition:attachment;filename=".basename($rep));
        header("Content-type:application/pdf");
        header("Content-Transfer-Encoding:binary");
        header("Content-Length:".filesize($rep));
        readfile($rep);
    }
     
    // pdf
    switch ($_GET['cv'])
    {
    case "en":
        head( 'files/~olivier/cv.en-GB.pdf' );
        break;
    case "fr":
        head( 'files/~olivier/cv.fr-FR.pdf' );
        break;
    }
    Et là?
    "On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"

  5. #5
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Merci beaucoup pour ton aide. Cela fonctionne mais je remarqué tout de même un petit dysfonctionnement.

    Lorsque je clique et que j'obtiens la boîte de téléchargement, j'apuis sur annuler. Si je répète trois cette manipulation, j'obtiens tout de même une page blanche avec le code de la page php avec toujours ce fameux message
    Cannot modify header information - headers already sent
    Est-ce normal ?

    Merci

    PS: je précise que le code en question se trouve dans un fichier à part et que celui-ci est inséré comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php 
    require_once("utils.php"); ==> fichier contenant le code
    ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    
    <head>
    <title>....</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
    <link rel="stylesheet" type="text/css" href="stylesheet.css" />
    </head>
    
    <body>
    <?php
    include("header.php");
    include("content.php");
    include("footer.php");
    ?>
    .Olivier

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu ne peux pas a la fois envoyer un fichier pdf et du code HTML.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu ne peux pas a la fois envoyer un fichier pdf et du code HTML.
    Ce qui veut dire que je dois créer une page par exemple download.php afin d'éviter ce genre de problème ?
    .Olivier

  8. #8
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    Citation Envoyé par Olivier Regnier Voir le message
    Ce qui veut dire que je dois créer une page par exemple download.php afin d'éviter ce genre de problème ?
    oui il est parfois plus pratique de séparer ça. d'un coté ton script qui retourne de l'HTML et un deuxième fichier qui envoie un autre entête pour le téléchargement
    GNAP !

  9. #9
    Expert éminent

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Points : 6 686
    Points
    6 686
    Par défaut
    J'ai suivi vos conseils. J'ai séparé le code dans un autre fichier et ce la fonctionne à la perfection
    .Olivier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ouvrir un fichier pdf dans le navigateur
    Par mystro7200 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/12/2009, 12h13
  2. ouvrir un fichier PDF avec shellexecute
    Par lespetitspapiers dans le forum VBA Word
    Réponses: 10
    Dernier message: 29/10/2008, 22h38
  3. Ouvrir un fichier pdf avec Access VBA
    Par dflamme dans le forum VBA Access
    Réponses: 29
    Dernier message: 14/10/2008, 11h41
  4. ouvrir un fichier PDF avec une JSP
    Par fernier dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/11/2007, 11h19
  5. Ouvrir un fichier Pdf avec access
    Par willytito dans le forum Access
    Réponses: 1
    Dernier message: 13/08/2006, 19h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo