Modifying a single text file in a ZIP file, in PHP

2020-05-25 18:04发布

I have a ZIP file on my server. I want to create a PHP file, loadZIP.php that will accept a single parameter, and then modify a text file within the ZIP to reflect that parameter.

So, accessing loadZIP.php?param=blue, will open up the zip file, and replace some text in a text file I specify with 'blue', and allow the user to download this edited zip file.

I've looked over all of the PHP ZIP functions, but I can't find a simple solution. It seems like a relatively easy problem, and I believe I'm over thinking it. Before I go and write some overly complex functions, I was wondering how you'd go about this.

1条回答
地球回转人心会变
2楼-- · 2020-05-25 18:26

Have you taken a look at PHP5's ZipArchive functions?

Basically, you can use ZipArchive::Open() to open the zip, then ZipArchive::getFromName() to read the file into memory. Then, modify it, use ZipArchive::deleteName() to remove the old file, use ZipArchive::AddFromString() to write the new contents back to the zip, and 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';
}

Note ZipArchive was introduced in PHP 5.2.0 (but, ZipArchive is also available as a PECL package).

查看更多
登录 后发表回答