Изменение одного текстового файла в ZIP-файле на PHP - PullRequest
16 голосов
/ 03 ноября 2010

У меня есть ZIP-файл на моем сервере.Я хочу создать файл PHP, loadZIP.php, который будет принимать один параметр, а затем изменить текстовый файл в ZIP-архиве, чтобы отразить этот параметр.

Таким образом, доступ к loadZIP.php?param=blue откроет zipфайла, и замените некоторый текст в текстовом файле, который я указал «синим», и разрешите пользователю загружать этот отредактированный zip-файл.

Я просмотрел все функции PHP ZIP, но могу »не могу найти простое решение.Кажется, это относительно простая проблема, и я думаю, что я слишком много думаю об этом.Прежде чем я пойду и напишу некоторые чрезмерно сложные функции, мне было интересно, как вы поступите с этим.

1 Ответ

32 голосов
/ 03 ноября 2010

Вы взглянули на ZipArchive функции PHP5?

По сути, вы можете использовать ZipArchive::Open(), чтобы открыть zip, затем ZipArchive::getFromName()прочитать файл в память.Затем измените его, используйте ZipArchive::deleteName(), чтобы удалить старый файл, используйте ZipArchive::AddFromString(), чтобы записать новое содержимое обратно в zip, и 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';
}

Примечание ZipArchive был представлен в PHP 5.2.0 (но ZipArchive также доступен в виде пакета PECL ).

...