2010-11-03 10 views
11

J'ai un fichier ZIP sur mon serveur. Je veux créer un fichier PHP, loadZIP.php qui acceptera un seul paramètre, puis modifier un fichier texte dans le ZIP pour refléter ce paramètre. Donc, en accédant à loadZIP.php?param=blue, j'ouvrirai le fichier zip et remplacerai du texte dans un fichier texte que je spécifie par 'blue', et autoriserai l'utilisateur à télécharger ce fichier zip édité.Modification d'un seul fichier texte dans un fichier ZIP, en PHP

J'ai regardé toutes les fonctions de PHP de PHP, mais je ne peux pas trouver une solution simple. Cela semble être un problème relativement facile, et je crois que je suis trop en train de le penser. Avant de partir et d'écrire des fonctions trop complexes, je me demandais comment vous alliez faire.

Répondre

20

Avez-vous jeté un coup d'oeil aux fonctions ZipArchive de PHP5?

Fondamentalement, vous pouvez utiliser ZipArchive::Open() pour ouvrir le zip, puis ZipArchive::getFromName() pour lire le fichier en mémoire. Ensuite, le modifier, utilisez ZipArchive::deleteName() pour enlever l'ancien fichier, utilisez ZipArchive::AddFromString() pour écrire le nouveau contenu Retour au zip et 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'; 
} 

Remarque ZipArchive a été introduit en PHP 5.2.0 (mais, ZipArchive est également disponible en tant que PECL package).