Search code examples
phpzip

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


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.


Solution

  • 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).