我的下载功能有问题。 在我的系统中,我喜欢安全下载。 通过网址无法访问我的根文件。 我将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中运行。
感谢您的帮助!
答案 0 :(得分:3)
尝试将ob_clean
放在标题上方。如果在您当前的代码中成功发送了这些标题,我甚至怀疑您是否需要ob_clean。
答案 1 :(得分:2)
在标题函数之前,输出中可能会有一些字符,因为代码似乎是正确的。在这种情况下,您还应将error_display
设置为关闭,否则您将收到警告。
在if
。{/ p>之后检查headers_sent功能
答案 2 :(得分:0)
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)将文件下载到默认下载文件夹中,然后打开它。您只需要在下载之前检查“询问保存每个文件的位置”以获取该框。