我想创建一个zip文件,其中包括以前生成的所有发票。问题是,如果我尝试使用Laravels存储url()
或get()
函数来执行此操作,则ZipArchive无法找到文件。
我尝试用storage_path()
,->url()
,->get()
解决问题,但没有一个起作用。仅当我输入文件路径时,它才有效。
这就是现在的样子,并且可以正常工作。
$invoiceZipFileName = Carbon::now()->toDateString() . "_invoices.zip";
$zip = new ZipArchive();
$zip->open($invoiceZipFileName, ZipArchive::CREATE);
$files->each(function ($item, $key) use ($zip, $disk) {
$zip->addFile("storage/invoices/" . $item, $item);
});
$zip->close();
我想要实现的是这样的:
$invoiceZipFileName = Carbon::now()->toDateString() . "_invoices.zip";
$zip = new ZipArchive();
$zip->open($invoiceZipFileName, ZipArchive::CREATE);
$files->each(function ($item, $key) use ($zip, $disk) {
$zip->addFile($disk->get($item), $item);
});
$zip->close();
或:
$invoiceZipFileName = Carbon::now()->toDateString() . "_invoices.zip";
$zip = new ZipArchive();
$zip->open($invoiceZipFileName, ZipArchive::CREATE);
$files->each(function ($item, $key) use ($zip, $disk) {
$zip->addFile($disk->url($item), $item);
});
$zip->close();
或:
$invoiceZipFileName = Carbon::now()->toDateString() . "_invoices.zip";
$zip = new ZipArchive();
$zip->open($invoiceZipFileName, ZipArchive::CREATE);
$files->each(function ($item, $key) use ($zip, $disk) {
$zip->addFile(storage_path("invoices") . "/" . $item, $item);
});
$zip->close();
这些是错误消息(在另一种情况下,它们不会一起出现)我得到:
exception: "Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException"
file: "C:\xampp\htdocs\invoicing\vendor\symfony\http-foundation\File\File.php"
line: 36
message: "The file "2019-10-02_invoices.zip" does not exist"
exception: "ErrorException"
file: "C:\xampp\htdocs\invoicing\app\Http\Controllers\Api\V1\InvoiceController.php"
line: 211
message: "ZipArchive::close(): Failure to create temporary file: No error"
++++编辑++++ 问题解决了。必须更新我的文件系统配置。
答案 0 :(得分:0)
使用下面的链接设置Zipper程序包到您的laravel项目中。
完成Zipper程序包安装后,将以下代码用于您尊敬的控制器中。
$ files = glob($ image_dir_media。$ file_new_name);
$ date = new DateTime();
$ zip = $ date-> format('Y-m-d')。 '_invoices.zip';
\ Zipper :: make(public_path()。'/ media /'。$ zip)-> add($ files)-> close();
谢谢 PHPanchal