2010-11-03 10 views
11

Tengo un archivo ZIP en mi servidor. Quiero crear un archivo PHP, loadZIP.php que acepte un solo parámetro, y luego modificar un archivo de texto dentro del ZIP para reflejar ese parámetro.Modificar un solo archivo de texto en un archivo ZIP, en PHP

Por lo tanto, al acceder a loadZIP.php?param=blue, se abrirá el archivo zip, y reemplazará algún texto de un archivo de texto que especifique con 'azul', y permitirá que el usuario descargue este archivo zip editado.

He revisado todas las funciones ZIP de PHP, pero no puedo encontrar una solución simple. Parece un problema relativamente fácil, y creo que ya lo estoy pensando. Antes de ir y escribir algunas funciones demasiado complejas, me preguntaba cómo harías con esto.

Respuesta

20

¿Has echado un vistazo a las funciones de PHP5 ZipArchive?

Básicamente, puede usar ZipArchive::Open() para abrir el zip, luego ZipArchive::getFromName() para leer el archivo en la memoria. A continuación, modificarlo, utilizar ZipArchive::deleteName() para eliminar el archivo de edad, use ZipArchive::AddFromString() a escribir el nuevo contenido nuevo a la postal, y 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'; 
} 

Nota ZipArchive fue introducido en PHP 5.2.0 (pero, también es ZipArchive disponible como PECL package).

Cuestiones relacionadas