如何创建具有低 memory_limit 的大型 zip 文件?

Posted

技术标签:

【中文标题】如何创建具有低 memory_limit 的大型 zip 文件?【英文标题】:How to create large zip files with low memory_limit? 【发布时间】:2014-12-17 14:22:08 【问题描述】:

我需要从 jpg 文件创建一个大型 zip 存档。 zip 生成在 64MB 时中断 - 无法增加主机的内存限制。

我尝试了很多方法来生成 zip 文件,但都失败了:

php ZipArchive 类。 exec("zip -r file.zip *.jpg") pclzip(可以选择生成临时文件而不是内存)

也许还有另一种方法可以使用内存不足的流/临时文件创建 zip 文件?

感谢您的建议

【问题讨论】:

你读过这篇文章吗?它看起来很有帮助而且相当全面。 ***.com/questions/4357073/… @NickAllen 谢谢,我试过 fopen 也没有用。 :( 我认为在服务器上对机器本身也有限制,不仅在 php 中。 【参考方案1】:

您可以在脚本中尝试 set_time_limit ( sec ) 或 ini_set('max_execution_time', sec)。

你可以试试这样的

initialise your zip class

foreach ( files in the directory as $idx => $name) 

    add $name to your zip file;

    // every 10 files zipped, reset the max_execution_time
    if ( $idx > 0 && $idx % 10 == 0 ) 
        set_time_limit ( 30 ); //if it doesnt work try to use ini_set('max_execution_time', 30);
    

每压缩 10 个文件,它就会将 max_execution_time 重置为 30 秒。

我以10个文件为例,你可以根据你的平均文件大小来设置。

【讨论】:

以上是关于如何创建具有低 memory_limit 的大型 zip 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何读取具有不同数据类型的大型 JSON 文件

如何修改PHP的memory_limit限制

是否存在具有低级别前置操作的文件系统?

低代码和零代码,分别适合啥样类型的公司?

使用 CGImageDestinationFinalize 创建大型 GIF - 内存不足

使用 PHP/MySQL 导出大型 CSV 数据的最佳方法是啥?