对,所以我有个解决办法。如果有人能想出一个更好的办法,请让我知道,但现在这工作完美!我找到一个js库
PDFObject
可以用来制作跨浏览器解决方案,方便地将PDF嵌入到HTML文档中。有了这个,我可以在服务器上传递一个PDF链接和一个目标div来嵌入它(在我的例子中,我设置了一个模态,所以我们停留在同一个页面上)。
因为我们停留在同一个页面上,所以我可以使用以前在项目中写过的一个函数来阻止对整个页面的访问,如果用户没有正确的访问级别,则将用户重定向到索引。一些类似的东西会起作用:
function checkSession() {
if(empty($_SESSION)) {
header("Location: /?cheeky_monkey");
}
}
如果用户试图直接访问pdf,则htaccess中的此代码会阻止它们。它只允许通过应用程序访问:
SetEnvIf Referer "localhost" is_local_referer
Require env is_local_referer
这样一来,所需要做的就是在单击pdf时在脚本标记处抛出一个url以加载,通过以下代码序列完成:
首先,我们需要获取pdf的url(您可以跳过这一步)
首先,每当有人单击查看pdf时,都会调用此javascript(此调用简单地嵌套为onclick属性):
function viewMedia(projectID, type, item) {
$.ajax({
url: '../includes/function.projects.php?cid=' + projectID + '&type=' + type + '&view-media=' + item,
success: function(data) {
$('.pdf-script').html('');
$('#viewMediaModal').modal('toggle');
}
})
}
这是在php页面上运行的代码。
public function viewMedia($item) {
$mediaItems = unserialize($this->media);
$file = '/path/to/pdf/' . $mediaItems[$item]['file'];
echo $file;
}
此函数返回数据的示例:
/path/to/pdf/example-pdf.pdf
使用此加载PDF
一旦我们有了正确的PDF URL,AJAX返回成功,返回的数据可以用来重新生成JavaScript,这次是用新的PDF链接:
success: function(data) {
$('.pdf-script').html('');
$('#viewMediaModal').modal('toggle');
}
这就是模态体的结构:
结果
上述代码序列的结果将切换如下所示的模式:
如果用户试图直接访问文件: