2010-02-04 99 views
-4

请参阅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的软一个目录,然后一个文件,但在它的代码显示它作为一个文件。

就像那个在WinRAR:

dir/ 

dir/newname.txt 

在我的PHP系统,仅仅只显示一个文件,没有它的目录,这样的:

dir/newname.txt 

这意味着它是不可能添加一个新的文件一个dir。

+1

请解释一下你希望我们为你写的例子。 – Natrium 2010-02-04 08:27:44

+0

您的问题对我而言并不明确,而且您不使用标点或首字母,这会使您的问题难以阅读。 – 2010-02-04 09:04:05

回答

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显示归档结构的方式。

+0

我想知道为什么这不被接受,甚至被@ moustafa评论 – cregox 2010-03-11 17:46:11

相关问题