【发布时间】: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 生成的。所以用户成功下载文件,然后文件不可用。