![](/img/trans.png)
[英]i want to create zip file in cakephp.But my code is not working?
[英]I need to create .Zip file in Laravel and my code does not work
这是我第一次在 StackOverflow 上发帖。 我需要创建一个包含多个图像的 zip 文件。 我已经尝试过 Zipper 和 ZipArchive,但我的代码仍然失败。
$zip = new \ZipArchive();
foreach ($students as $student) {
$download = 'album' . $student->album_id . '.zip';
if ($zip->open(public_path('albums/' . $student->album_id . '/' . $download), \ZipArchive::CREATE) === TRUE) {
$files = Storage::allFiles('public/albums/' . $student->album_id . '/image_files');
foreach ($files as $file) {
$zip->addFile($file);
}
$zip->close();
}
}
我可以保证所有图像都存在。 我将图像放在Storage/app/public/albums/$student->album_id/image_files/
。 请帮我。
首先,您可以添加一个额外的步骤来使用 PHP 内置函数来验证您的文件是否存在: file_exists()
大多数情况下,如果您的文件不存在,则不会将任何文件添加到zip 中,并且您的代码将运行而不会引发任何错误,但仍然无法运行。
您传递给 addFile() 的不是正确的路径。 addFile() 需要存储文件的绝对路径。 您需要添加这一行$file_path = storage_path("app/{$file}");
见下面的代码:
$zip = new \ZipArchive();
foreach ($students as $student) {
$download = 'album' . $student->album_id . '.zip';
if ($zip->open(public_path('albums/' . $student->album_id . '/' . $download), \ZipArchive::CREATE) === TRUE) {
$files = Storage::allFiles('public/albums/' . $student->album_id . '/image_files');
foreach ($files as $file) {
$file_path = storage_path("app/{$file}");
if (file_exists($file_path)) {
$zip->addFile($filepath);
}
}
$zip->close();
}
}
或者,如果您希望下载任何压缩文件,您可以在代码末尾返回下载响应以进行下载:
return response()->download(public_path('albums/' . $student->album_id . '/' . $download));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.