PHP 中非常规的 .ZIP 处理和查找/替换

Posted

技术标签:

【中文标题】PHP 中非常规的 .ZIP 处理和查找/替换【英文标题】:Unconventional .ZIP handling and find/replace in PHP 【发布时间】:2012-10-10 17:55:25 【问题描述】:

我正在尝试使用 php 中的 .ZIP 存档来完成一项非常规的任务。我有一个用于自动化任务的 zip 存档(它是 Amazon EC2 实例的启动包),其中包含许多文本和 xml 文件。我需要做的是在这些文件中查找/替换一些文本,并使用 PHP 即时输出 BASE 64 编码字符串(而不是编写新的 .zip 文件)。

我可以毫无问题地获取文件内容并使用 file_get_contents() 和 base64_encode() 或查找/替换来对它们进行 base64 编码,这是解压缩和压缩字符串我似乎无法弄清楚.

我想避免解压缩存档、复制文件、编辑文件并将新的 .zip 文件写入磁盘,然后获取内容并对其进行编码。我希望可能有一个看起来更像这样的解决方案:

    将 zip 文件的内容转换成字符串。

    $originalZipFile = file_get_contents('Path/To/ZipFile');
    

    将该字符串中的数据“解压缩”为一个新字符串,以公开我想要查找/替换的文本位。

    $unzippedFile = someFunction($originalZipFile);
    

    查找和替换文本。

    $processedString = str_replace($find, $replace, $unzippedFile);
    

    将处理后的字符串“重新压缩”成一个新的字符串。

    $rezippedFile = someOtherFunction($processedString);
    

    Base64 编码“重新压缩的”字符串。

    $desiredOutputString = base64_encode($rezippedFile);
    

我查看了 PHP ZipArchive 类,但它似乎没有我正在寻找的功能。

非常感谢任何见解!

-奥利弗

【问题讨论】:

【参考方案1】:

嗯,我相信我找到了一个很好的解决方案。对于其他寻求类似解决方案的人,我建议您查看 Paul Duncan 的 ZipStream-PHP 课程。

使用此类,您可以将文件、内容和目录动态写入 zip 文件,然后无需将文件写入磁盘即可进行流式传输。

相当自动化。

【讨论】:

以上是关于PHP 中非常规的 .ZIP 处理和查找/替换的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 在存档中查找特定文件

在多个批处理文件中查找和替换

用字符串中的任何字符查找任何数字和空格的匹配模式并替换为 |在 PHP [关闭]

2018-1-16 Linux学习笔记[重要]

在.bat(批处理文件)中查找和替换导致未知错误的字符串

在配置文件powershell或批处理文件中查找和替换[关闭]