首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  PHP

PHP 打包几个 G,甚至 10 几个 G 的 zip 包

  •  
  •   zhengwhizz · 182 天前 · 3020 次点击
    这是一个创建于 182 天前的主题,其中的信息可能已经有所发展或是发生改变。

    从 阿里云 oss 打包十几 G 的 zip 包供下载,目前用的 flysystem zip ,发现都是在 3.6G 左右就打完,丢失了好多文件。请问有什么好方法避免内存不足?另外下载又有什么好方案,目前是打包到服务器 xsendfile 下载,但是服务器带宽有限,也不能断点续传,想着打包完后回传 oss 再下载,但是好像也不能断点吧?

    第 1 条附言  ·  182 天前
    问题没说清楚,现补充如下:
    打哪些文件是根据数据库里的记录来定的,而且打包后的文件夹要根据记录所在城市及记录 ID 等字段来定,类似 北京 /朝阳 /地址 /ID ;不知道工具能不能提供类似功能?
    另外这是提供给客户的下载功能,并非自己人用的,即使规定让客户用什么 Util,他也不一定知道怎么用。
    第 2 条附言  ·  182 天前
    另外,客户不止一家,A 只能下载他的记录相关文件,B C D 也如此。
    24 回复  |  直到 2019-06-13 19:51:11 +08:00
        1
    vibbow   182 天前
    直接系统命令调用 7z 进行打包
        2
    zhengwhizz   182 天前
    @vibbow 能打包 oss 上的网络文件?几十万个文件的
        3
    KasuganoSoras   182 天前
    修改 php.ini
    把 max_execution_time 参数调大一点
    把 memory_limit 调大一点
    最好用异步执行,或者命令行运行

    另外你说你服务器带宽有限,那打包完了回传到 OSS 和直接给用户下载有啥区别啊……(挠头
    最好是打包完了以后存到一个临时目录,然后让用户下载这个临时文件
    因为有 Nginx 或者 Apache 去处理静态文件下载,就支持断点续传了
        4
    KasuganoSoras   182 天前
    最好就是搞个水管粗点的服务器,像国外便宜的 G 口服务器一大把,你只需要把下载文件这部分代码单独拎出来丢到下载服务器上去进行处理就好了,打包完了直接下载,不用搞什么回传 OSS。
        5
    zhengwhizz   182 天前
    @KasuganoSoras oss 和 web 服务器是阿里同一区域内网的。目前最大一个打包估计 15 个 G。。调参数之前就调了。现在下载的就是静态文件形式的。
        6
    runtu2019   182 天前
    阿里云提供了那么多 oss 工具不知道用,不知道怎么说你了
    先开通 ram 子账号,在下载 ossutil 工具或则其他 oss 工具,用 oss 外网地址进行连接
    丢在那下一个晚上不就好了,直接下载到本地,oss 按量付费,外网带宽费也不要太多钱吧
        7
    0myun   182 天前
    @KasuganoSoras #4 “,像国外便宜的 G 口服务器一大把,”?推荐推荐呗
        8
    jimrok   182 天前
    有个 ossutil64 的命令,可以拷贝 oss 里的文件,你一个个目录拷贝,蚂蚁搬家如何?
        9
    wslsq   182 天前
    队列执行命令运行吧
        10
    zwl2012   182 天前 via iPhone
    不是可以调用 shell 管道压缩传送吗
        11
    zwl2012   182 天前 via iPhone
    管道压缩占用的内存应该还行吧
        12
    zwl2012   182 天前 via iPhone
    虽然压缩比一般
        13
    KasuganoSoras   182 天前   ♥ 1
    @0myun #7 dedipath, nocix, onevps 这几个都是我常用的,搜一下名字就有,网上评测都很详细了
        14
    KasuganoSoras   182 天前   ♥ 1
    @0myun #7 另外你的账号可能被降权了,你回复我没提醒,我刚刚点进来看才发现
        15
    chinesestudio   182 天前 via Android
    tar 有啥不好么
        16
    also24   182 天前
    同问,为什么要用 zip,这种场景似乎更应该用 tar
        17
    game69010   182 天前
    开临时服务器下载就不会占用自己服务器资源,可以临时买个配置高点的,宽带 5m,一两元不到的成本就可以搞定了
        18
    zhengwhizz   181 天前 via Android
    @chinesestudio
    @also24 怎么用 tar 打包 网络上的文件,并且打包时按一定的文件夹命名? 如 北京 /朝阳 /100/aaa.jpg
        19
    also24   181 天前
    @zhengwhizz #18
    还是要下载下来打包进去,推荐 tar 的原因主要有两个:
    1、tar 可以增补文件,也就是说你可以一个一个文件下载下来加进去,减少磁盘 /内存占用
    2、tar 是归档格式,只打包不压缩,减少 CPU/内存占用,提升打包速度
        20
    Jeffrey4l   181 天前
    试试 zsync?
        21
    zhengwhizz   181 天前
    @also24 ok,我试试
        22
    zhengwhizz   181 天前
    @also24 我用 tar 打了中文乱码,有解决方法吗?换了 zip 倒是正常。
        23
    also24   181 天前
    @zhengwhizz #22
    在 Windows 下解压的?应该是因为打包 /解压的地方字符集配置不一致导致的。

    可能需要配置打包服务器的字符集为 gb18030,或者解压那边自己手选一下字符集。
        24
    zhengwhizz   180 天前 via Android
    @also24 包是给客户下的,解压设不现实,服务器设的话不知道会不会产生副作用。换了 zip 命令打出来正常就用它了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4309 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 34ms · UTC 03:36 · PVG 11:36 · LAX 19:36 · JFK 22:36
    ♥ Do have faith in what you're doing.