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 解压缩成功。
PHP / Laravel / Yii2 老项目维护与长期技术支持
如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。
适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护
可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查
如需咨询,请联系我,并注明:PHP 维护咨询。
联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com
