见this question。我无法使用该代码:
function addFolderToZip($dir, $zipArchive, $zipdir = ''){
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
//Add the directory
$zipArchive->addEmptyDir($dir);
// Loop through all the files
while (($file = readdir($dh)) !== false) {
//If it's a folder, run the function again!
if(!is_file($dir . $file)){
// Skip parent and root directories
if( ($file !== ".") && ($file !== "..")){
addFolderToZip($dir . $file . "/", $zipArchive, $zipdir . $file . "/");
}
}else{
// Add the files
$zipArchive->addFile($dir . $file, $zipdir . $file);
}
}
}
请为我写一个例子。第二个问题太复杂了。
当我使用addfile
功能时,它会添加并作为文件显示在存档中,这很棒。现在我用的时候:
$z = new ZipArchive();
$z->open('test.zip')
for ($i=0; $i< $z->numFiles;$i++) {
$aZipDtls = $z->statIndex($i);
echo $aZipDtls['name'];
}
现在显示我是否在文件夹中添加了一个文件:
$zip->addFile('/path/to/index.txt', 'dir/newname.txt');
它在Winrar中显示一个dir然后是一个文件但在代码中它将它显示为一个文件。
与winrar中的相似:
dir/
dir/newname.txt
在我的PHP系统中,只显示一个没有dir的文件,如:
dir/newname.txt
这意味着在dir中添加新文件是不可能的。
答案 0 :(得分:1)
很难知道你想要什么,但这里有:
<?php
$zip = new ZipArchive();
$zip->open('test.zip');
$zip->addFile('/path/to/newname.txt','dir/newname1.txt');
$zip->addFile('/path/to/newname.txt','dir/newname2.txt');
$zip->addFile('/path/to/newname.txt','dir/dir/newname3.txt');
$zip->addFile('/path/to/newname.txt','dir/dir/dir/newname4.txt');
for ($i=0; $i< $zip->numFiles;++$i) {
$aZipDtls = $zip->statIndex($i);
echo $aZipDtls['name'],"\n";
}
$zip->close();
?>
应涵盖所有问题。这将与您期望的结构完全解压缩。这种差异可能是由于WinRar显示归档结构的方式。