【问题标题】:PDF download managed by php is not working由 php 管理的 PDF 下载不起作用
【发布时间】:2011-06-08 08:37:26
【问题描述】:

我有以下功能:

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 等...

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

我不知道问题出在哪里,我已经强制附件类型,以便他们强制保存它而不是它出现在浏览器中,因为在 ie6 中,如果你使用它往往会崩溃adobe 插件而不是程序。

编辑:

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

我研究了一下,似乎直接链接有一个 MIME 类型的 PDF,adobe 告诉浏览器属于 adobe reader,我想知道 save as 是否会强制相同的行为导致错误。

任何帮助将不胜感激!

【问题讨论】:

  • “找不到文件”如“HTTP 错误 404 - 找不到文件”或 PHP 脚本生成的“找不到文件”消息?
  • 可能不相关但$fileID=(int)$_REQUEST["f"] & mysql_num_rows($result) >=1 & readfile($file);
  • 还有 file_GetPath 函数,您使用请求中的参数 id,如果是,该函数是否返回文件的正确路径为什么要查询 db
  • 抱歉,“找不到文件”是 adobe 生成的。所以用户成功下载文件,然后文件不可用。

标签: php pdf download


【解决方案1】:

好的,它似乎被隔离到:

header("内容配置:附件;....

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-07
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 2019-03-04
    • 2015-08-07
    相关资源
    最近更新 更多