2016-03-25 4 views
0

Я хотел бы вставить файл PDF на веб-страницу. Мне нужно динамически создавать PDF-файл, чтобы я мог сначала аутентифицировать пользователя, поэтому я использую XSendFile в Apache. Файл PHP, с которым я работаю, отлично работает, когда я посещаю браузер с файлом PDF, который сразу предлагается для загрузки. Вот код, я использую (любезно http://www.brighterlamp.com/2010/10/send-files-faster-better-with-php-mod_xsendfile/)Проблемы с вложением PDF-файла, отправленного с XSendFile на веб-странице

// Get a list of loaded Apache modules 
$modules = apache_get_modules(); 
if (in_array('mod_xsendfile', $modules)) { 
    // Use XSendFile if possible 
    header ('X-Sendfile: ' . $pathToFile); 
    header ('Content-Type: ' . $documentMIME); 
    header ('Content-Disposition: attachment; filename="' . $actualFilename . '"'); 
    exit; 
} else { 
    // Otherwise, use the traditional PHP way.. 
    header ('Content-Type: ' . $documentMIME); 
    header ('Content-Disposition: attachment; filename="' . $actualFilename . '"'); 
    @ob_end_clean(); 
    @ob_end_flush(); 
    readfile($pathToFile); 
    exit; 
} 

До сих пор так хорошо. Теперь я хочу встроить этот PDF-файл в веб-страницу, используя тег объекта, например:

<object data="dynamicpdf.php" type="application/pdf"> 
    <p>PDF embed failed</a></p> 
</object> 

Но это не удается. Если я переключу атрибут данных в статический PDF-файл, тогда он отлично работает.

Любые идеи, что происходит не так?

ответ

1

Является ли iframing PDF вариантом для вас?

Как <iframe src="dynamicpdf.php">

Content-Disposition заголовка заставляет загрузку. Убери это.

Общие советы: Я бы не использовал такие функции, как apache_get_modules, которые удовлетворяют определенной среде веб-сервера.

Что делать, если вы отключаетесь от mod_php или apache в будущем? Ваш код сломается.

Вместо этого я бы сделал доставку в поточном php-ответе, что более эффективно с памятью, чем выход, буферизуя весь PDF-файл в RAM, а затем отправляйте его.

По потоковом PDF с PHP вы также иметь только одну реализацию, и было бы такой же скоростью, как х-SendFile является:

Streaming a large file using PHP

+0

обменивая в течение