3

我将我的应用程序从 WAMP 服务器(PHP 版本 <= 5.2,Windows XP)移动到 LAMP 服务器(PHP > 5.3,Ubuntu 12.04 LTS),我现在遇到的问题是我的下载功能在屏幕上输出文件并且它不会强制浏览器执行下载。

任何人都可以指出我正确的方向吗?

这是代码:

function download()
{

$fullPath = $_POST['fisier'];

if($fullPath=="NULL")
{
 echo "Wrong path!";
}
else
{

$fd = fopen ($fullPath, "r");

if ($fd) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);    

    switch ($ext) {
        case "pdf":
            header("Content-type: application/pdf"); 
            break;

        case "tiff":
            header("Content-type: image/tiff");

            break;

        case "tif":
            header("Content-type: image/tiff" );
            break;

        default:    
             header("Content-type: application/force-download");
            break;
    }
    header("Content-Description: File Transfer"); 
    header('Content-Disposition:  attachment; filename="'.$path_parts["basename"].'"');
    header("Content-length: ".$fsize);
    header("Cache-control: private"); //use this to open files directly


    ob_clean();
    flush(); 
    while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
    }

}

fclose ($fd);
exit;
}
}
4

3 回答 3

1

您可以Content-Disposition按照PHP 文档使用标题:

如果您希望提示用户保存您发送的数据,例如生成的 PDF 文件,您可以使用 » Content-Disposition 标头提供推荐的文件名并强制浏览器显示保存对话框。

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
于 2013-03-19T22:45:31.290 回答
0

尝试使用header("Content-type: application/octet-stream");而不是header("Content-type: application/force-download");

于 2013-03-19T22:43:35.860 回答
0

对于接收“应用程序/八位字节流”实体的实现,推荐的操作是简单地将数据放入文件中

这里。看起来你application/force-download是非标准的。

于 2013-03-19T22:45:18.050 回答