下载功能不起作用


Download function doesn't work

我有一个下载功能的问题。在我的系统中,我喜欢进行安全下载。在我的根文件不能通过url访问。我将ftp权限设置为700。只有服务器可以访问。之后,我做了一个可以为用户下载文件的功能。此时,我可以对会话进行安全检查。

但是当服务器通过这段代码下载文件时,该文件在浏览器中打开。使用exe时,浏览器会显示奇怪的字母。

  // Bestandsnaam
            $file = 'bestanden/test.exe';
            // Ophalen bestand
            if (file_exists($file)) {
                header('Content-Description: File Transfer');
                header('Content-Type: application/octet-stream');
                header('Content-Disposition: attachment; filename='.basename($file));
                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();
                readfile($file);
                exit;
            }

我想要一个保存框当用户访问url。

我想这样使用这个函数:

<a href="www.site.nl/downloadfunction/file">download</a>

有人有解决办法吗?我尝试了Javascript document.execCommand('SaveAs',null,bestand);而不是readfile但它在Firefox中不起作用。

谢谢你的帮助!

尝试将ob_clean置于标题之上。如果这些标头在当前代码中成功发送,我甚至怀疑您是否需要ob_clean.

在头函数之前的输出中可能有一些字符,因为代码看起来是正确的。在这种情况下,您还应该将error_display设置为关闭,否则您应该收到警告。

检查在if之后的headers_sent函数。

我使用完全相同的代码,它工作得很好。

然而,客户端做什么取决于浏览器的参数。如果文件类型在浏览器中被设置为"总是打开",并且默认的下载动作是"下载无需询问",它将1)下载默认下载文件夹中的文件,2)打开它。您只需勾选"下载前询问每个文件的保存位置"即可获得此框。

使用下载帮助器:

function process($file)
{
    $this->load->helper('download');
    $data = file_get_contents("my-downloads/$file"); // Read the file's contents
    force_download($file, $data);            
}

应该照顾细节(头,mime类型检测),否则你需要摆弄。

如果您对细节感兴趣,可以获得源代码。