我的服务器上有一个ZIP文件。我想创建一个PHP文件,loadZIP.php,它将接受一个参数,然后修改ZIP中的文本文件以反映该参数。
因此,访问loadZIP.php?param=blue
将打开zip文件,并将我指定的文本文件中的某些文本替换为“blue”,并允许用户下载此编辑的zip文件。
我已查看了所有PHP ZIP函数,但我找不到简单的解决方案。这似乎是一个相对容易的问题,我相信我已经过度思考了。在我去写一些过于复杂的函数之前,我想知道你是怎么做的。
答案 0 :(得分:31)
您是否看过PHP5的ZipArchive
函数?
基本上,您可以使用ZipArchive::Open()
打开zip,然后使用ZipArchive::getFromName()
将文件读入内存。然后,修改它,使用ZipArchive::deleteName()
删除旧文件,使用ZipArchive::AddFromString()
将新内容写回zip,ZipArchive::close()
:
$zip = new ZipArchive;
$fileToModify = 'myfile.txt';
if ($zip->open('test1.zip') === TRUE) {
//Read contents into memory
$oldContents = $zip->getFromName($fileToModify);
//Modify contents:
$newContents = str_replace('key', $_GET['param'], $oldContents)
//Delete the old...
$zip->deleteName($fileToModify)
//Write the new...
$zip->addFromString($fileToModify, $newContents);
//And write back to the filesystem.
$zip->close();
echo 'ok';
} else {
echo 'failed';
}
注意ZipArchive是在PHP 5.2.0中引入的(但是,ZipArchive也可以PECL package形式提供)。
答案 1 :(得分:0)
在PHP 8中,您可以使用ZipArchive::replaceFile
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->replaceFile('/path/to/index.txt', 1);
$zip->close();
echo 'ok';
} else {
echo 'failed';
}
?>