Я пытаюсь показать PDF в браузере, если это возможно – и я знаю, что могу сделать это в Chrome, и это то, что я тестирую. Проблема в том, что каждый раз, когда я пытаюсь, он запрашивает загрузку.
Я использую PHP-сессии, поэтому я знаю, что отправляются некоторые посторонние заголовки, поэтому я вызвал header_remove()
чтобы сбросить все.
Я вызываю эту функцию, чтобы показать PDF:
<?php // For demonstrative purposes session_start(); if (!isset($_SESSION['auth'])) { header('Location: login.php'); die; } /* * void viewPDF (Report $report) * Outputs the PDF of the report */ function viewPDF ($report) { // Tell the browser we are going to serve a PDF file. $file = dirname(__FILE__).'/../reports/'.$report->id.'.pdf'; // The location of the PDF if (!file_exists($file)) { die ('The PDF does not exist.'); // Somehow the file does not exist. } header_remove(); // I'm using PHP sessions, so remove the headers // automatically set that might break something. header('Content-Disposition: inline;filename='.$report->id.'.pdf'); header('Content-Transfer-Encoding: binary'); header('Content-Type: application/pdf'); header('Content-Length: '.filesize($file)); readfile($file); // Serve the report PDF file from the reports // repository. die; // Any whitespace could corrupt the PDF, so be extra // sure nothing else gets printed. } // For demonstrative purposes: $report = new StdClass; $report->id = 1; viewPDF($report); ?>
Это отправленные заголовки:
Date: Tue, 08 Oct 2013 18:41:32 GMT Server: Apache/2.2.22 (Win32) PHP/5.4.15 Content-Type: application/pdf Content-Transfer-Encoding: binary Content-Disposition: inline;filename=1.pdf Connection: Keep-Alive Keep-Alive: timeout=5, max=100 Content-Length: 73464
Тем не менее, это все еще вызывает загрузку. Как только он загружается, я могу открыть его в Adobe Reader просто отлично.
Я что-то упускаю?
Благодарю.
Этот код работал для меня:
header('Content-Description: File Transfer'); header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename="' . basename($file).'"'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file);