我一直在试图使用fopen()和readfile()的变体来安全地提供PDF。大多数方法在Firefox和Chrome中运行良好,无论我是在Windows / OSX / iOS上,但没有方法都适用于Internet Explorer或Safari。我根据其他人的建议尝试了各种各样的标题变化,但没有运气。
这是我的代码:
<?php
session_start();
if ($_SESSION['user_is_logged_in'] === true || $_SESSION['admin_user_is_logged_in'] === true) {
$name = $_GET['name'];
$path = "www.mypath.com/$name";
$fp = fopen($path, 'rb');
header("Content-Type: application/pdf");
header("Content-Length: " . filesize($path));
//Experimented with this but all it does is force a download instead of opening in browser.
//header("Content-Disposition: attachment; filename=".$name);
readfile($path);
//alternately tried
//passthru($fp);
}
else {
echo "You do not have permission to view this file. Please <a href='../../index.php'>log in</a>.";
}
exit;
?>
如果我在标题中使用Content-Disposition,结果是在Safari或IE中下载的任何PDF都是0KB且无法读取。没有内容处理IE和Safari就会挂在空白页面上。
答案 0 :(得分:0)
这些是我想分享的一些建议:
尝试使用localpaths即。 windows(c:\ folder \ resource.pdf)或linux(/var/www/project/resouce.pdf)。
打印$ path并检查这是否是正确生成的文件。
然后尝试这段代码,我使用的是:
<?php
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename={$this->filename}.pdf");
readfile($path);
unlink($path);