当我下载原始zip时,它工作正常,但是当我使用下面的标题下载它时,它不起作用。我知道最好采取这种方式并告诉浏览器如何处理文件而不是将其留给浏览器,但我不能让它工作,所以我很想使用header()前进。 / p>
$path = $this->tru->config->get('root.path').'/Digital Version of Book for Web.zip';
set_time_limit(0);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-Type: application/zip');
header("Content-Transfer-Encoding: binary");
header('Content-Disposition: attachment; filename="NewFileName.zip"');
header('Content-Length: ' . filesize($path));
$f = fopen($path, 'rb');
fpassthru($f);
fclose($f);
修改
很抱歉,我的意思是它不起作用的是文件以zip格式下载(全部9.3 MB),但我无法解压缩zip,因为它无效。
答案 0 :(得分:1)
使用记事本或其他文本编辑器查看ZIP文件。检查在前几行是否有一个PHP错误消息搞砸了该文件。它可能是“已发送标头”消息或set_time_limit()
调用由于脚本处于安全模式而引发错误。
答案 1 :(得分:0)
尝试使用readfile()
。 PHP Manual中提供了一个示例。
$file = 'monkey.gif';
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;
}