2010-11-03 4 views
11

Ich habe eine ZIP-Datei auf meinem Server. Ich möchte eine PHP-Datei erstellen, loadZIP.php, die einen einzelnen Parameter akzeptiert, und dann eine Textdatei innerhalb des ZIP ändern, um diesen Parameter widerzuspiegeln.Ändern einer einzelnen Textdatei in einer ZIP-Datei, in PHP

Also, Zugriff auf loadZIP.php?param=blue, öffnet die ZIP-Datei, und ersetzen Sie einige Text in einer Textdatei, die ich mit 'blau' angeben, und erlauben Sie dem Benutzer, diese bearbeitete Zip-Datei herunterladen.

Ich habe über alle PHP-ZIP-Funktionen nachgedacht, aber ich kann keine einfache Lösung finden. Es scheint ein relativ einfaches Problem zu sein, und ich glaube, dass ich darüber nachdenke. Bevor ich etwas übermäßig komplexe Funktionen schreibe, habe ich mich gefragt, wie du das machen würdest.

Antwort

20

Haben Sie sich die ZipArchive Funktionen von PHP5 angesehen?

Grundsätzlich können Sie ZipArchive::Open() verwenden, um die Zip zu öffnen, dann ZipArchive::getFromName(), um die Datei in den Speicher zu lesen. Dann ändern Sie es, verwenden Sie ZipArchive::deleteName() die alte Datei zu entfernen, verwenden Sie ZipArchive::AddFromString() den neuen Inhalt zurück in die zip zu schreiben, und 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'; 
} 

Hinweis ZipArchive in PHP 5.2.0 eingeführt wurde (aber ist ZipArchive auch erhältlich als PECL package).