下载功能不起作用

时间:2011-08-23 10:14:24

标签: php javascript codeigniter http-headers download

我的下载功能有问题。 在我的系统中,我喜欢安全下载。 通过网址无法访问我的根文件。 我将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;
            }

当用户访问网址时,我想要一个保存为框。

我想以这种方式使用这个功能:

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

有没有人有解决方案。我试过Javascript document.execCommand('SaveAs',null,bestand);而不是readfile 但它确实可以在Firefox中运行。

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

尝试将ob_clean放在标题上方。如果在您当前的代码中成功发送了这些标题,我甚至怀疑您是否需要ob_clean。

答案 1 :(得分:2)

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

if。{/ p>之后检查headers_sent功能

答案 2 :(得分:0)

使用download helper

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

应该处理你需要摆弄的细节(标题,哑剧类型检测)。

如果您对细节感兴趣,请source is available

答案 3 :(得分:0)

我使用完全相同的代码,它完美无缺。

但是,客户端的操作取决于浏览器参数。如果文件类型在浏览器中设置为“始终打开”,并且默认下载操作为“无需下载”,则1)将文件下载到默认下载文件夹中,然后打开它。您只需要在下载之前检查“询问保存每个文件的位置”以获取该框。