1

编辑

问题解决了。不得不更新我的文件系统配置。

我想创建一个包含之前生成的所有发票的 zip 文件。问题是,如果我尝试使用 laravel 存储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"

++++ 编辑 ++++ 问题已解决。不得不更新我的文件系统配置。

4

1 回答 1

1
  • 使用以下链接将 Zipper 包安装到您的 laravel 项目中。

    https://github.com/Chumper/Zipper

  • 完成 Zipper 包设置后,将以下代码用于您尊敬的控制器。

    $files = glob($image_dir_media . $file_new_name);

    $date = new DateTime();

    $zip = $date->format('Ymd') 。'_invoices.zip';

    \Zipper::make(public_path() . '/media/' . $zip)->add($files)->close();

谢谢 PHPanchal

于 2019-10-02T11:56:36.953 回答