由php管理的PDF下载无效

时间:2011-06-08 08:37:26

标签: php pdf download

我有以下功能:

if (isset($_REQUEST["f"]))
{
  //get file details from database
  $fileID=$_REQUEST["f"];
  $sql = "select * from sds_files where file_id = " .fquery_sanitize($fileID);
  $result = fquery_db($sql);

  //$file_extension = strtolower(substr(strrchr($filename,"."),1));
  if(mysql_num_rows($result) >0)
  {
    $row = mysql_fetch_assoc($result);
    $filename = $row['file_name'];
    $file = file_GetPath($fileID); 

    header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header('Content-Type: application/octetstream');
    header("Content-Transfer-Encoding: Binary");
    header("Content-length: ".filesize($file));
    header("Content-disposition: attachment; filename=\"".basename($filename)."\"");
    readfile("$file");                
  }
  else
  {
    echo "File cannot be found";
  }
}
else
{
    echo "No file selected";
}

这会得到一个文件,可以是任何类型,.xls,.doc .dox,.pdf等......

对于大多数pdfs,此代码有效,但在单独的情况下,我得到用户声称他们收到错误,如“找不到文件”。但是,如果我给他们一个文件的直接链接,它可以正常工作。

我无法理解问题是什么,我强迫附件类型,以便他们被迫保存它而不是它出现在浏览器中,因为在ie6中,如果你使用它,它往往会崩溃adobe插件而不是程序。

编辑:

错误是adobe acrobat错误的一部分,与PHP或apache错误代码无关。更多客户相关。我正在显示代码,因为用户的行为不同。

我已经对它进行了一点研究,似乎直接链接的MIME类型为PDF,adobe告诉浏览器属于adobe reader,我想知道是否会因为强制相同的行为导致错误。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

好吧,似乎是孤立的:

标题(“内容 - 处置:附件; ....

这会强制浏览器下载到内容而不使用浏览器插件,这会导致某些用户设置出现权限问题。