2010-02-04 23 views
-4

Voir this question. Je ne peux pas utiliser ce code:Pourquoi mon code postal ne fonctionne pas comme prévu?

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); 

      } 
     } 
    } 

Veuillez écrire un exemple pour moi. Le deuxième problème est trop complexe.

Lorsque j'utilise la fonction addfile, il va ajouter et apparaître dans l'archive comme un fichier et ce grand. Maintenant, quand je l'utilise:

$z = new ZipArchive(); 
$z->open('test.zip') 

for ($i=0; $i< $z->numFiles;$i++) { 
$aZipDtls = $z->statIndex($i); 

echo $aZipDtls['name']; 
} 

il montre maintenant si j'ajouter un fichier dans le dossier comme ça:

$zip->addFile('/path/to/index.txt', 'dir/newname.txt'); 

il montre dans le soft un répertoire puis un fichier Winrar mais dans le code il le montre en un seul fichier.

Comme ça dans winrar:

dir/ 

dir/newname.txt 

Dans mon système PHP, juste seulement afficher un fichier sans son répertoire, comme ça:

dir/newname.txt 

Cela signifie qu'il est impossible d'ajouter un nouveau fichier dans un dir.

+1

veuillez expliquer ce que vous voulez que nous écrivions un exemple pour vous. – Natrium

+0

Votre problème n'est pas clair pour moi, et vous n'utilisez pas de ponctuation ou de majuscules, ce qui rend votre question difficile à lire. –

Répondre

1

Difficile de savoir ce que vous voulez, mais voilà:

<?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(); 
?> 

devrait couvrir toutes les questions. Cela va décompresser avec exactement la structure que vous attendez. L'écart est probablement dû à la manière dont WinRar affiche la structure d'archivage.

+0

Je me demande pourquoi cela n'a pas été accepté ou même commenté, par @moustafa – cregox

Questions connexes