已发送标题但下载未启动(强制下载)

时间:2011-07-18 21:55:08

标签: php header download salesforce

我有一个带有表单的灯箱,当用户发送表单时应该开始下载,这是我使用的代码:

function start_download( $path, $item ) {
    $file = $path.$item;
    header("Content-type:application/pdf");
    header('"Content-Disposition:attachment;filename="'.$file.'"');
}

除非功能是一个问题,否则我认为它应该正常工作?好吧,它没有。没有任何错误。

查看Chrome的开发者工具,我可以看到标题实际设置为application/pdf

哦,当我添加readfile($file)时,它似乎读取了文件,但它返回一个奇怪的字符串(数字和奇怪的符号)。

我在这个网站上搜索但似乎没有任何效果。我真的不知道我还能做什么。想法?

顺便说一句,如果我“回应”$file它正确显示了网址,我认为这不是问题。

3 个答案:

答案 0 :(得分:1)

你有一个很好的报价,一个

header('"Content-Disposition:attachment;filename="'.$file.'"');
       ^^--- why double quoting?

他们打破了标题电话。

尝试:

header("Content-Disposition: attachment; filename=$file");

请注意,我在那里放了一些空格。严格来说,他们没有必要,但他们确实提供了易读性。

答案 1 :(得分:0)

function start_download( $path, $item ) {
  $file = $path.$item;
  header("Content-Type: application/pdf");
  header('Content-Disposition: attachment;filename="'.basename($file) . '"');
  readfile($file);
}

据我所知,这可能有用,只要$file是pdf文件的有效本地路径名。确保绝对没有其他输出!

答案 2 :(得分:0)

尝试以下方法:

function start_download( $path, $item ) {

    $file = $path.$item;

    if (file_exists($file)) {
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . $item);
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        if (readfile($file) !== FALSE) return TRUE;
    } else {
        die('File does not exist');
    }
}