在网页中嵌入使用 XSendFile 发送的 PDF 文件时出现问题
Problems embedding PDF file sent with XSendFile in a webpage
我想在网页中嵌入 PDF 文件。我需要动态生成 PDF,以便首先对用户进行身份验证,因此我在 Apache 上使用 XSendFile。当我访问浏览器并立即提供 PDF 文件供下载时,我的 PHP 文件工作正常。这是我正在使用的代码(由 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 文件,则它可以正常工作。
知道出了什么问题吗?
iframing PDF 是否适合您?
喜欢<iframe src="dynamicpdf.php">
Content-Disposition
header 强制下载。去掉它。
一般建议:
我不会使用像 apache_get_modules
这样假设特定网络服务器环境的函数。
如果您将来不再使用 mod_php 或 apache 怎么办?您的代码将中断。
相反,我会在流式 php 响应中进行传送,这比将整个 PDF 输出缓冲到 RAM 中然后发送它的内存效率更高。
通过使用 PHP 将 PDF 流式传输出来,您也将只有一个实现,并且速度与 x-sendfile 相同:
我想在网页中嵌入 PDF 文件。我需要动态生成 PDF,以便首先对用户进行身份验证,因此我在 Apache 上使用 XSendFile。当我访问浏览器并立即提供 PDF 文件供下载时,我的 PHP 文件工作正常。这是我正在使用的代码(由 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 文件,则它可以正常工作。
知道出了什么问题吗?
iframing PDF 是否适合您?
喜欢<iframe src="dynamicpdf.php">
Content-Disposition
header 强制下载。去掉它。
一般建议:
我不会使用像 apache_get_modules
这样假设特定网络服务器环境的函数。
如果您将来不再使用 mod_php 或 apache 怎么办?您的代码将中断。
相反,我会在流式 php 响应中进行传送,这比将整个 PDF 输出缓冲到 RAM 中然后发送它的内存效率更高。
通过使用 PHP 将 PDF 流式传输出来,您也将只有一个实现,并且速度与 x-sendfile 相同: