2010-04-09 2 views
1

Je veux une page php pour 'afficher' un pdf. Voici le code:Firefox ne parvient pas à détecter le type de contenu défini par PHP

<?php 
    header("Content-type: application/pdf"); 
    readfile('Reportage - Berlin.pdf'); //tried echo(readfile(...)) as well 
?> 

Pas très compliqué Je pense, mais en quelque sorte firefox ne peut pas détecter qu'il s'agit d'un pdf. Cela fonctionne dans Safari, mais dans Firefox, je reçois une invite pour télécharger le fichier, donc je reçois comme un fichier pdftest.php. Je sais im obtenir mon dossier parce que si je renomme l'extension en pdf, je peux l'ouvrir.

Cela semble trop simple! Ai-je raté quelque chose?

Répondre

5

Si vous souhaitez l'ouvrir dans le navigateur à l'aide d'Adobe Reader, cela peut également dépendre des paramètres du navigateur. La raison pour laquelle le nom de fichier est pdftest.php est parce que vous ne dites pas au navigateur quel est le nom de fichier.

Si vous voulez forcer le navigateur à télécharger, ajouter ceci:

header('Content-Disposition: attachment; filename="downloaded.pdf"');

+1

+1 Ou juste de mettre le nom de fichier comme partie de chemin après le 'pdftest.php' fonctionne aussi bien. (Cela peut être nécessaire pour les noms de fichiers non-ASCII.) – bobince

+0

@Htbaa: et si je ne veux pas forcer le téléchargement? ajouter ce safari force pour télécharger le fichier au lieu de le 'prévisualiser' dans la fenêtre du navigateur. Je suppose que c'est une question plus importante: cet aperçu du navigateur est-il plutôt une fonctionnalité de safari uniquement? existe-t-il un moyen de simuler ce comportement dans ff? Cependant, cela répond définitivement à ma question de savoir comment faire ff voir le type. – Ying

+0

@bobince: Exactement ce dont j'avais besoin! Vous êtes l'homme (ou la femme)! – Ying

4

Htbaa a raison sur quelle ligne vous devez ajouter, mais comme Ying demande le navigateur pas pour télécharger le fichier, la ligne correcte serait:

header('Content-Disposition: inline; filename="downloaded.pdf"'); 

et par la manière, vous ne voulez pas echo(readfile(...)), car il ajouterait un int représentant la taille du fichier lu (php.net/readfile)

+1

et bien sûr, comme un en-tête est * doit * être mis * avant * vous commencez à imprimer le contenu du fichier – 1ace

Questions connexes