我正在使用Codeigniter的下载助手来"轻松"下载。
$this->load->helper('download');
$file = //get_file_name_from_db
$data = file_get_contents( upload_path . $file);
force_download($file, $data);
问题是,我有任何。zip下载正确,而。7z和。rar不是。然而,当我检查上传的文件,看看他们是否损坏,他们是好的(通过FTP或在本地通过简单地检查文件夹)。
如果文件真的很小(比如5kb左右),那么所有类型(7z和rar)都不会损坏。
作为参考,这里是我在mime.php中使用的mime类型(上传和下载助手都使用)
'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
'7z' => array('application/x-7z-compressed','application/x-7z', 'application/7z', 'application/force-download', 'application/octet-stream'),
'rar' => array('application/x-rar-compressed','application/x-rar', 'application/rar', 'application/octet-stream')
问题可能在两点上,要么是mime类型(它可能不是,因为如前所述,它在非常小的文件大小上工作)。或者file_get_contents()和header("Content-Length: ".strlen($data));这可能不是这样,因为无论大小。zip总是会正确下载。
或者可能是服务器配置问题?我在主机和本地主机上测试了它,它们的行为是相同的。
所以有人知道问题是什么,或者他们可以建议一个替代的下载脚本或方法,我应该使用?
更新:我在主机上上传了一个大小为1.8 MB的7z文件,下载时文件没有损坏……我越来越不明白问题出在哪里了。
更新:找到了答案,它是一个值,它位于文件的顶部,形成了一些连接的方法,我在那里回声了一个值,以便在一段时间前检查它。
更多信息请点击这里:是什么导致下载的文件损坏?
我认为PHP中没有内置库用于生成7z或rar文件,如zip/gzip。如果有的话,您可能需要使用外部库。