在 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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();
调整前:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $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 ); |
调整后:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $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 解压缩成功。
近期评论