2017-04-03 1 views
1

J'essaie d'afficher un fichier .pdf dans une application PHP. Il fonctionne parfaitement bien sur mon paramétrage de développement local mais en production, le même code affiche le pdf sous forme de texte tronqué.fichier pdf affiche comme texte/html au lieu de l'application/pdf

Ce sont les en-têtes de demande que je utilise:

<?php 
$file = $_GET["f"]; 
$filename = 'contrato.pdf'; 
header('Content-type: application/pdf'); 
header('Content-Disposition: inline; filename="' .$filename. '"'); 
header('Content-Transfer-Encoding: binary'); 
header('Accept-Ranges: bytes'); 
readfile($file); 
?> 

Ce sont les en-têtes de réponse de production selon chrome:

Connection:Keep-Alive 
Content-Encoding:gzip 
Content-Type:text/html 
Date:Mon, 03 Apr 2017 21:31:19 GMT 
Keep-Alive:timeout=15, max=189 
Server:Apache 
Transfer-Encoding:chunked 
Vary:Accept-Encoding 

Sur la configuration de développement, les en-têtes de réponse sont les suivants:

Accept-Ranges:bytes 
Connection:Keep-Alive 
Content-Disposition:inline; filename="contrato.pdf" 
Content-Transfer-Encoding:binary 
Content-Type:application/pdf 
Date:Mon, 03 Apr 2017 21:33:44 GMT 
Keep-Alive:timeout=5, max=100 
Server:Apache/2.4.7 (Win32) PHP/5.5.8 
Transfer-Encoding:chunked 
X-Powered-By:PHP/5.5.8 

Cela peut-il être dû aux paramètres d'apache?

+2

Juste pour vérifier: La sortie brouillées commence par quelque chose comme: '% PDF-1.3'? Vous devez activer le rapport d'erreurs en PHP. Voyez si quelque chose a été envoyé avant d'envoyer vos en-têtes. –

+0

Probablement un proxy ou un serveur le modifiant, ou votre demande de changement d'en-tête est refusée par PHP. Vérifiez vos erreurs: http://stackoverflow.com/q/845021/1255289 – miken32

+0

Oui, ça commence avec quelque chose comme ça. Les erreurs sont sur la production, bonne idée de les allumer pour déboguer cela. –

Répondre

-2

Je pense qu'il est l'erreur dans cette ligne:

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

Notez la petite lettre t

cette ligne devrait ressembler à ceci:

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

Notez également que vous êtes lire un fichier en utilisant $ _GET ["f"] c'est faux, lire plutôt le fichier de la variable $ filename. Changer la dernière ligne:

readfile($filename); 

Quoi qu'il en soit, voici la correction de votre code:

<?php 
$file = $_GET["f"]; 
$filename = 'abc.pdf'; 
header('Content-Type: application/pdf'); 
header('Content-Disposition: inline; filename="' .$file. '"'); 
header('Content-Transfer-Encoding: binary'); 
header('Accept-Ranges: bytes'); 
readfile($filename); 
?> 
+0

non ils ne sont pas sensibles à la casse voir: RFC 2616 – nogad

+0

J'ai également remarqué que et essayé avec les majuscules T, cela n'a fait aucune différence. En ce qui concerne la variable filename, je ne pense pas que ce soit le problème car je peux accéder au fichier, le problème est qu'il apparaît sous forme de texte/html. –

+0

Notez que vous essayez de lire le mauvais fichier –