[英]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.