2

我似乎无法弄清楚这一点,我知道这很简单。我正在构建一个非常基本的内容管理系统的后端。对于这个特定的部分,我只是想创建一个允许下载文件(客户端的 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;

    }
}    
?>  

非常感谢,

乔希

4

2 回答 2

1

我认为问题可能是 PHP 文件中的某处有一些空格,这导致标头未正确发送,因此您会看到整个输出。

我建议以下步骤:

  1. 检查“connect.php”并在文件的开头/结尾查找空行/空格并将其删除

  2. 以这种方式调整您的 php 文件,即您?>在文件末尾省略了结束标记 - 这样您就不会在文件末尾得到空行

  3. 如果以上还不够,您需要检查您的 apache 和 php 错误日志和/或设置错误日志,因此您还会看到警告 - 如果标头未正确发送或是否存在其他错误,您将收到通知

于 2014-03-06T15:02:04.040 回答
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."");
于 2013-02-27T22:41:52.057 回答