我似乎无法弄清楚这一点,我知道这很简单。我正在构建一个非常基本的内容管理系统的后端。对于这个特定的部分,我只是想创建一个允许下载文件(客户端的CV)的PHP链接。
我的问题:
当点击下载文件的链接时,而不是浏览器提示您选择本地目录来保存文件 - 它只是在文档内容之前和之后显示文件和一堆符号(我假设这是文件的打开和关闭exif数据,用于解密的应用程序。)
我怎样才能强制浏览器提示用户输入“另存为...”框?
<?php
require("connect.php");
$query = "SELECT * FROM kb_info LIMIT 1";
$result = mysql_query($query, $link);
while ($row = mysql_fetch_array($result)) {
$file_extension = end(explode(".", $row["extension"]));
if ($file_extension == doc) {
header('Content-disposition: attachment; filename='.$row["extension"]);
header('Content-type: application/doc');
header ("Content-Length: ".filesize($row["extension"]));
readfile($row["extension"]);
exit;
}
if ($file_extension == docx) {
header('Content-disposition: attachment; filename='.$row["extension"]);
header('Content-type: application/docx');
header ("Content-Length: ".filesize($row["extension"]));
readfile($row["extension"]);
exit;
}
if ($file_extension == pdf) {
header('Content-disposition: attachment; filename='.$row["extension"]);
header('Content-type: application/pdf');
header ("Content-Length: ".filesize($row["extension"]));
readfile($row["extension"]);
exit;
}
}
?>
非常感谢,
Joshie
答案 0 :(得分:1)
我认为问题可能是PHP文件中存在某些空格,导致标题未正确发送,因此您可以看到整个输出。
我建议采取以下步骤:
检查“connect.php”并在文件的开头/结尾查找空行/空格并将其删除
以这种方式调整你的php文件,你在文件的末尾省略了结束标记?>
- 这样你就不会在文件的末尾得到空行
如果以上内容不够,您需要检查您的apache和php错误日志和/或设置错误登录,这样您还会看到警告 - 如果标题未正确发送,您将被告知如果还有其他错误
答案 1 :(得分:0)
我用于下载的标题:
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=".$file);
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$bytes."");