如何使用php将多个文件作为zip文件下载?

推荐答案

您可以使用ZipArchive类创建一个ZIP文件,并将其流式传输到客户端.比如:

$files = array('readme.txt', 'test.html', 'image.gif');
$zipname = 'file.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
foreach ($files as $file) {
  $zip->addFile($file);
}
$zip->close();

要流式传输它,请执行以下操作:

header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zipname);
header('Content-Length: ' . filesize($zipname));
readfile($zipname);

第二行强制浏览器向用户显示下载框,并提示名称filename.拉链第三行是可选的,但某些(主要是较旧的)浏览器在未指定内容大小的情况下在某些情况下会出现问题.

Php相关问答推荐

Laravel:让所有用户在一年中的特定月份休息几天

PHP中的圆生成器在国际日期变更线上失败

添加登录:需要app.yaml仍然允许所有拥有Google帐户的人访问

在Laravel中为表添加前缀,以将它们逻辑地分组

在Laravel中修改JSON输出

将数组推送到数组时,数组推送()出现问题

如何在WooCommerce产品子类别中显示特定内容

Apache只允许index.php-不从根目录工作

当配置的URL为空时禁用Laravel Slack日志(log)记录

未收到Strava WebHook事件数据

WooCommerce产品页面上没有产品详细信息

在 Woocommerce 邮箱订单中显示产品 GTIN

如何在 PHP 中以 hh:mm:ss 格式获取两个 strtotime datetime/s 之间的时间差

循环中未序列化数组显示的问题

在 Botiga 主题模板中添加复选框到政策行.Woocommerce

Shopware 6.4.20店铺激活问题

Laravel auth()->id() 在生产服务器中不工作

为 WordPress 页面创建新功能

适当的时区处理 Laravel / Carbon

带有 nginx 的 Symfony 不提供 .js 和 .css 文件