簡體   English   中英

在 PHP 中修改 ZIP 文件中的單個文本文件

[英]Modifying a single text file in a ZIP file, in PHP

我的服務器上有一個 ZIP 文件。 我想創建一個 PHP 文件 loadZIP.php,它將接受單個參數,然后修改 ZIP 中的文本文件以反映該參數。

因此,訪問loadZIP.php?param=blue ,將打開 zip 文件,並將我指定的文本文件中的一些文本替換為“blue”,並允許用戶下載此編輯過的 zip 文件。

我查看了所有 PHP ZIP 函數,但找不到簡單的解決方案。 這似乎是一個相對容易的問題,我相信我想多了。 在我開始編寫一些過於復雜的函數之前,我想知道你會怎么做。

你看過 PHP5 的ZipArchive函數嗎?

基本上,您可以使用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 包使用)。

在 PHP 8 中你可以使用ZipArchive::replaceFile

正如文檔中的這個例子所示

<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
    $zip->replaceFile('/path/to/index.txt', 1);
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM