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 :

Ouverture de pdf


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut Ouverture de pdf
    Bonjour à tous j'ai un petit problème avec mon script php :
    Je n'arrive pas à l'afficher, la page charge à l'infinie mais ne l'affiche pas.
    Merci de votre aide.
    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
    <?php
    echo $id;
    if(isset($_GET['id'])){
    	$id = $_GET['id'];
    	$sql = "SELECT * FROM documents where id = '$id'";
    	$rep = mysql_query($sql);
    	while ($donnees = mysql_fetch_array($rep)){
    		$data = $donnees['document'];
    		header('Content-Type: application/pdf') ;
    		header('Content-Length: ' . strlen($data)) ;
    		header('Content-Disposition: inline; filename="nom_du_fichier.pdf"') ;
    		header("Cache-Control:  max-age=1");
    		header("Pragma: public");
    		echo $data;
    	}
    }
    else 
    {
    	echo "Erreur ! ";
    }
    ?>

  2. #2
    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
    Mieux écrit ça donne ça :
    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
    <?php
    if(isset($_GET['id']))
    {
    	$sql = "SELECT * FROM documents_sinter where id = '" . mysql_real_escape_string($_GET['id']) . "'";
    	$rep = mysql_query($sql);
            $donnees = mysql_fetch_array($rep))
    	$data = $donnees['document'];
    	header('Content-Type: application/pdf') ;
    	header('Content-Length: ' . strlen($data)) ;
    	header('Content-Disposition: inline; filename="nom_du_fichier.pdf"') ;
    	header("Cache-Control:  max-age=1");
    	header("Pragma: public");
    	echo $data;
    }
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Merci de votre réponse, je viens d'essayer mais je me retrouve avec une page blanche. Le pdf ne charge toujours pas.

    Edit : je viens de voir qu'il manquait un point virgule mais meme en le rajoutant ça ne marche pas : La page charge toujours comme avant mais plus de page blanche.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    quelle est la nature de la colonne document de la table documents_sinter ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Ce sont les fichiers pdf qui sont dans cette colonne. Au format blob

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ok,

    et avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    header('Content-Type: application/pdf');
    header('Content-Disposition: inline; filename="nom_du_fichier.pdf"');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: '.strlen($data));
    header('Accept-Ranges: bytes');
    header("Cache-Control:  max-age=0");
    header("Pragma: public");
    Tu es en HTTP 1.0 ou 1.1 ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Il y a de l'amélioration la barre de chargement avance reste bloqué à la fin. C'est du HTTP 1.1

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Si ça reste bloqué à la fin, c'est peut-être dû à ton navigateur et aux multiples essais déjà réalisés.
    Efface tout le cache, cookies... et réessaie.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    J'ai tout effacé mais aucun changement ça charge encore jusqu’à la fin fait toujours aucun affichage.

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Dans ton premier code, l'affectation des headers se fait dans une boucle while. C'est pas vraiment le top...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Rajoute donc un exit; après le echo $data; comme ça, cela coupera la boucle inutile while.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    J'ai enlevé la boucle while comme me la suggéré Sabotage.
    J'ai ensuite modifié les headers avec le code de Rawsrc,
    Ce qui me donne
    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
     
    <?php
    if(isset($_GET['id']))
    {
    	$sql = "SELECT * FROM documents where id = '" . mysql_real_escape_string($_GET['id']) . "'";
    	$rep = mysql_query($sql);
            $donnees = mysql_fetch_array($rep);
    	$data = $donnees['document'];
    	header('Content-Type: application/pdf');
    	header('Content-Disposition: inline; filename="nom_du_fichier.pdf"');
    	header('Content-Transfer-Encoding: binary');
    	header('Content-Length: '.strlen($data));
    	header('Accept-Ranges: bytes');
    	header("Cache-Control:  max-age=0");
    	header("Pragma: public");
    	echo $data;
    }
    ?>

  13. #13
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Vire header("Cache-Control: max-age=0"); et rajoute moi mon exit; stp

    Au fait tu as le même comportement sous tous les navigateurs ?

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    C'est bon c'est fait ^^.
    J'ai essayer sur internet explorer (je suis sous chrome normalement). Et j'ai eu le message d'erreur suivant : Le fichier ne commence pas par "PDF-".
    J'ai donc modifié le code pour rajouter .PDF derrière le nom et cela me fais le même que sous chrome maintenant. J'ai la barre de chargement de adobe qui arrive à 100% puis plus rien.

    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
    <?php
    if(isset($_GET['id']))
    {
    	$sql = "SELECT * FROM documents where id = '" . mysql_real_escape_string($_GET['id']) . "'";
    	$rep = mysql_query($sql);
        $donnees = mysql_fetch_array($rep);
    	$data = $donnees['document'];
    	$data=$data."pdf";
    	header('Content-Type: application/pdf');
    	header('Content-Disposition: inline; filename="nom_du_fichier.pdf"');
    	header('Content-Transfer-Encoding: binary');
    	header('Content-Length: '.strlen($data));
    	header('Accept-Ranges: bytes');
    	header("Pragma: public");
    	echo $data;
    	exit;
    }
    ?>

  15. #15
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ok donc ton problème ne situe pas dans ce bout de code depuis le début...

    Il semblerait que c'est ton pdf qui pose problème.
    Les PDF doivent commencer par %PDF- vérifie bien avec un éditeur hexadécimal que c'est bien le cas.
    Assure toi bien aussi que ton blob suit la même règle.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Je viens d'aller vérifier dans la base de donnée et le fichier blob commence bien par %PDF- du coup je ne sais plus du tout quoi faire.


    EDIT : quand je télécharge le fichier pdf de la base de donnée j'arrive à l’exécuter donc le fichier n'est pas corrompu.

  17. #17
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ben faut pas désespérer, ce n'est que de l'informatique ^^

    On va essayer autrement. De ton blob on va créer sur le serveur un fichier .pdf que l'on enverra au client
    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
    if(isset($_GET['id']))
    {
        $sql  = "SELECT * FROM documents where id = '" . mysql_real_escape_string($_GET['id']) . "'";
        $qry  = mysql_query($sql);
        $doc  = mysql_fetch_array($qry);
        if ( ! empty($doc))
        {
            $filename = 'nom_du_fichier.pdf';
            file_put_contents($filename, $doc['document']);
            header('Content-Type: application/pdf');
            header('Content-Disposition: inline; filename="'.$filename.'"');
            header('Content-Transfer-Encoding: binary');
            header('Content-Length: '.filesize($filename);
            @readfile($filename);
            exit;
        }
    }

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    La ça m'affiche la page blanche comme au début. Je suis sur ce problème depuis ce matin 9h ^^ je n'en peut plus.

  19. #19
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    dans tous les navigateurs ?
    Tu as bien vérifié que le fichier pdf était bien créé ?

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    J'ai essayé sous chrome et IE et oui page blanche pour les deux. Le fichier doit bien être créé à l'endroit où mon script est exécuté ? Si oui le fichier n'est pas créé.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ouverture fichier pdf
    Par karibouxe dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 30/05/2007, 11h57
  2. [c#]Ouverture de pdf via datagridview
    Par boss_gama dans le forum C#
    Réponses: 1
    Dernier message: 09/05/2007, 11h24
  3. ouverture document pdf
    Par ikane dans le forum Struts 1
    Réponses: 6
    Dernier message: 11/12/2006, 19h25
  4. Probleme d'ouverture de PDF avec Word
    Par Mut dans le forum Word
    Réponses: 4
    Dernier message: 26/05/2006, 10h05
  5. [FPDF] Problème lors de l'ouverture du PDF par le navigateur
    Par licorne dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 26/01/2006, 16h04

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