Проблемы при встраивании файла PDF, отправленного с помощью XSendFile, на веб-страницу

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

Есть идеи, что не так?

0

Решение

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

подобно <iframe src="dynamicpdf.php">

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

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

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

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

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

Потоковая передача большого файла с использованием PHP

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]