我知道这方面有很多线索,但我在这里面临着特殊的问题
首先,我正在尝试输出一个 zip 文件以供下载。我有以下代码
$file = '/home/www/public/'.$filename;
header('Content-Type: application/zip');
header("Content-Transfer-Encoding: Binary");
header('Content-disposition: attachment; filename='.$filename.'');
header('Content-Length: '.filesize($file));
echo readfile($file);
问题是,使用这些标头下载的 zip 已损坏。无法打开它(存档意外结束)。当我删除 Content-length 标头时它没有损坏 - 但是,用户看不到下载时间。
我还想为 exe 文件调整相同的代码(只是将类型更改为 application/octet-stream),但我得到了相同的结果。文件本身肯定没问题。只是在下载过程中出现了问题
任何帮助表示赞赏
下面是我正在使用的实际代码(已经建议进行两次更改之后)。我为stackoverflow简化了它,但也许里面有一些东西
$id = post('file');
$object = Software_Files_Model::create()->find($id);
if ($object->software) {
$file = '/home/www/public'.$object->software->getPath();
$size=$object->software->size;
header('Content-Type: application/zip');
header("Content-Transfer-Encoding: Binary");
header('Content-Disposition: attachment; filename='.$object->software->name.'');
header('Content-Length: '.$size);
readfile($file);
exit;
}
只是再次添加,文件下载作为一个整体。如果它的重量为 10 兆,则所有 10 兆都可以下载,保留文件名和所有内容。我什至可以打开 zip 存档并查看内容。消息出现时是在解压过程中