使用PHP fopen或readfile提供PDF时浏览器不兼容

时间:2015-09-25 16:18:51

标签: php internet-explorer header fopen readfile

我一直在试图使用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就会挂在空白页面上。

1 个答案:

答案 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);