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 :

FPDF ouverture de fichiers [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut FPDF ouverture de fichiers
    Re bonjour,

    Voici un autre mystère pour moi.

    J'ai 2 sites strictement identiques: l'un est en mode normal, l'autre en mode sécurisé.

    Sur le site sécurisé j'ouvre correctement toute sorte de fichier lisible (pdf,doc, xls, etc.)

    Sur le site normal, je n'arrive pas à les ouvrir alors que le script d'ouverture est strictement le même, j'ai fait un copier coller. Il affiche à l'écran plein de caractères "hiéroglyphes".

    J'ai essayé de changer le paramètre pragma du header de public (mode SSL) à private. rien n'y fait et je ne reçois aucun warning ni message d'erreur.

    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
     
    function ouvre_pdf($fichier) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.basename($fichier));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        // désactivation du cache
        header('Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0');
        header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
        header('Pragma: private');
        header('Content-Length: ' . filesize($fichier));
        ob_clean();
        flush();
        readfile($fichier);
        return;
    }
    Voyez vous une explication de l'erreur dans mon code ci dessus ?

    @lain

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Rajoute l'encodage utilisé pour le header content-type. voir http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

  3. #3
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Rajoute l'encodage utilisé pour le header content-type. voir http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
    Non cela ne marche pas. J'ai essayé pour PDF

    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
    function ouvre_pdf($fichier) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Type: application/pdf');
        header('Content-Disposition: attachment; filename='.basename($fichier));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        // désactivation du cache
        header('Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0');
        header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
        header('Pragma: public');
        header('Content-Length: ' . filesize($fichier));
        ob_clean();
        flush();
        readfile($fichier);
        return;
    }
    Du reste je ne comprend pas pourquoi cela fonctionne avec un HTTPS et pas avec un HTTP. Je viens de re-tester les 2 sites avec le même fichier.

    Il doit manquer quelque chose quelque part. Mais Quoi ?

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Je voulais dire rajoute le charset utilisé dans le header content-type.

  5. #5
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut
    Cela ne marche toujours pas avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        header('Content-Type: application/pdf; charset=ISO-8859-1');
    C'est "énervant" de ne pas comprendre ce qui se passe.

    Je vais essayer de passer le site "rebelle" en HTTPS et on verra ?

    Sur le site HTTPS le code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        header('Content-Type: application/octet-stream');
    Or le paramètre octet-stream ne s'applique qu'aux applications avec pour extension exe .

    Je suppose que dans le mode HTTPS ce content-type est normal puisque le navigateur reçoit un flux chiffré (SSL).

    Mais en mode HTTP je ne comprend pas pourquoi le navigateur ne lit pas le fichier pdf.


  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    En réalité, application/octet-stream caractérise n'importe quel flux d'octet (c'est un type mime générique).

    Enfin, je ne vois pas bien ce que ça pourrait être à part un problème d'encodage. Tu es sûr d'être en ISO-8859-1 et pas en UTF-8 ?

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

Discussions similaires

  1. ouverture de fichier txt
    Par juguul dans le forum MFC
    Réponses: 11
    Dernier message: 18/12/2003, 09h44
  2. Ouverture de fichier en api
    Par Michaël dans le forum Windows
    Réponses: 9
    Dernier message: 10/12/2003, 16h47
  3. Ouverture de fichier
    Par Ricou.13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/10/2003, 08h59
  4. Réponses: 2
    Dernier message: 26/02/2003, 15h18
  5. [VBA-E] Evenement ouverture de fichier
    Par gjeff dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2002, 09h42

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