在 Windows 10 中,一个 ZIP 压缩文件(基于 ZipStream PHP),基于 360 压缩解压成功,基于 WinRAR 解压缩失败
1、参考:在 Laravel 6 中基于 ZipStream PHP ,将 zip 文件流式传输到 S3 存储桶。参考:在 PHP 7.4 中基于 fopen 生成一个流资源,操作了磁盘,调整为完全基于内存的实现。基于 360 压缩解压成功,基于 WinRAR 解压缩失败。如图1
2、在 Linux 上用 7z 进行解压,虽然能解压出来,但是其实还是有报错信息。如图2
ERRORS: Unexpected end of archive -- Path = assets_new.zip Type = zip ERRORS: Unexpected end of archive Physical Size = 781844 Archives with Errors: 1 Open Errors: 1
3、参考:https://maennchen.dev/ZipStream-PHP/guide/FlySystem.html 。在上传流之前,需要先执行:$zip->finish();
调整前:
$name = $this->themeInstallationTask->themeInstallation->theme_id . '/assets.zip'; $stream = fopen('php://memory', 'w+'); $options = new Archive(); $options->setOutputStream($stream); $zip = new ZipStream($name, $options); $zip->addFile(str_replace('\\', '/', str_replace(self::$destination . '/', '', $file->getPathname())), $file->getContents()); Storage::disk(config('theme_asset.filesystem.disk'))->putStream( $name, $stream, config('theme_asset.filesystem.options') ); $zip->finish(); fclose($stream);
调整后:
$name = $this->themeInstallationTask->themeInstallation->theme_id . '/assets.zip'; $stream = fopen('php://memory', 'w+'); $options = new Archive(); $options->setOutputStream($stream); $zip = new ZipStream($name, $options); $zip->addFile(str_replace('\\', '/', str_replace(self::$destination . '/', '', $file->getPathname())), $file->getContents()); $zip->finish(); Storage::disk(config('theme_asset.filesystem.disk'))->putStream( $name, $stream, config('theme_asset.filesystem.options') ); fclose($stream);
4、基于 360 压缩解压成功,基于 WinRAR 解压缩成功。
近期评论