2010-11-27 7 views
1

est-il une solution pour renommer un dossier dans zipfile avant de décompresser?Comment renommer un dossier en utilisant ZipArchive?

$zip = new ZipArchive(); 
$result=$zip->renameName($acfoldername , $renameFolder); 

Fonction renameName semble que pour renommer les fichiers et dossiers non

$zip->renameName($acfoldername , $renameFolder); 

OU est-il une solution dans Zend Framework pour la gestion des fichiers zip?

Répondre

-2

Désolé, mais il n'y a pas de classe dans la ZF qui peut renommer le dossier à l'intérieur du fichier ZIP

mais encore une fois il n'y a rien d'impossible, vous pouvez utiliser le même ZipArchive pour extraire le fichier quelque part et puis en utilisant le fonction Glob ou SPL Directory Iterator "

pour localiser votre dossier désiré à l'aide rename et la dernière étape consiste à zip dans votre dossier en utilisant le même ZipArchive

exemple de la création du fichier zip: http://davidwalsh.name/create-zip-php

5

répertoire de changement de nom à l'intérieur zipfile à l'aide ZipArchive :-)

$tmpfile = "myzip.zip"; 
copy("template.zip", $tmpfile); 

$zip = new ZipArchive; 
$res = $zip->open($tmpfile, ZipArchive::CREATE); 

if ($res === TRUE) { 
    $index = "<html>content</html>"; 

    $zip->addFromString('dirname/index.html', $index); 
    $zip->addFile("mp3/sample.mp3", 'dirname/audio/myAudioFile.mp3'); 

    // rename directory "dirname" 
    $name="newDirectoryName"; 
    $i=0; 
    while($item_name = $zip->getNameIndex($i)){ 
    $zip->renameIndex($i, str_replace("dirname", $name, $item_name)); 
    $i++; 
    } 

    $zip->close(); 

    header('Content-type: application/zip'); 
    header('Content-Disposition: attachment; filename="'.$name.'.zip"'); 
    readfile($tmpfile); 
    unlink($tmpfile); 
} 
0

Ce code peut renommer les fichiers/dossiers à l'intérieur d'un zip sans fichier extrait dans le dossier tmp.

<?php 
$Zip_path='Your Zip File Path'; 
$index='Your files or folder referring index.if not defined leave it as 'null'. But if you rename a file it must enter that file index. Otherwise will show php error. I didn't block that error in the code.'; 
$path='path to rename folder/file path including that wanted to rename file/folder name.If you wish to rename folder end path with '/' '; 
$Nname='Your New Name'; 

$zip = new ZipArchive; 
$zip->open($Zip_path); 

function ZipRenameFile($zip_p,$indx,$oldpath,$newname) {//rename using Ziprenamefile('Zip array,'File index', 'oldpath', 'New File Name') 

     $index_list=array(); 
     $op=''; 
     $Cnt=0; 
     $onout=''; 
     $od=pathinfo($oldpath,PATHINFO_DIRNAME); 

     if(substr($oldpath, -1) == '/'){ 
      for ($i=0; isset($zip_p->statIndex($i)['name']); $i++) { 
       if ($od == '.') { 
        if(strpos($zip_p->statIndex($i)['name'],$newname.'/') === 0) { 
         return ('already_exsist'); 
        }; 
       } 
       else { 
        if(strpos($zip_p->statIndex($i)['name'],$od.'/'.$newname.'/') === 0) { 
         return ('already_exsist'); 
        }; 
       }; 
       if (strpos($zip_p->statIndex($i)['name'],$oldpath) === 0) { 
        $index_list[]=$i; 
       }; 
      }; 
      for ($i=0; isset($index_list[$i]); $i++) { 
      $op=($zip_p->statIndex($index_list[$i])['name']); 
      if (substr($op, -1) == '/'){ 
       if ($od == '.') { 
        $op =preg_replace('|'.$oldpath.'|', $newname.'/', $op, 1); 
       } 
       else { 
        $op = preg_replace('|'.$oldpath.'|', $od.'/'.$newname.'/', $op, 1); 
       }; 
       if ($zip_p->renameIndex($index_list[$i],$op)) { 
        $Cnt=$Cnt+1; 
       }; 
      } 
      else { 
       if ($od == '.') { 
        $op = preg_replace('|'.$oldpath.'|', $newname.'/', $op, 1); 
       } 
       else { 
        $op = preg_replace('|'.$oldpath.'|', $od.'/'.$newname.'/', $op, 1); 
       }; 
       if($zip_p->renameIndex($index_list[$i],$op) == True) { 
        $Cnt=$Cnt+1; 
       }; 
      }; 
     }; 
     if ($Cnt==count($index_list)){ 
      return('ok_rename'); 
     } 
     else { 
      if ($Cnt != 0) { 
       return('ok_fail_rename'); 
      }; 
      return('fail_rename'); 
     }; 
    } 
    else { 
     if($od == '.'){ 
      $onout=''; 
     } 
     else { 
      $onout=$od.'/'; 
     }; 
     if($zip_p->renameIndex($indx,$onout.$newname) == True) { 
      return('ok_rename'); 
     } 
     else { 
      return('already_exsist'); 
     }; 
    }; 
}; 
echo ZipRenameFile($zip,$index,$path,$Nname); 
$zip->close(); 
?> 

SI VOUS VOULEZ PLUS AIDE S'IL VOUS PLAÎT VÉRIFIER MON PROJET https://github.com/CodeLyokoXtEAM/Zip.Php/blob/master/Edit/Zip.php

+0

que cela améliorer une réponse précédente upvoted? ou est-ce juste une publicité pour votre projet? –

+0

Ce code est utile pour renommer à l'intérieur d'un fichiers et dossiers à l'intérieur d'un Zip.But Quelqu'un voulait d'autres codes comme supprimer des dossiers (y compris les sous-dossiers et les fichiers, il ne peut pas être fait directement). Je pense qu'ils doivent aider mon projet. Si vous n'êtes pas sûr de ce code, exécutez ce code et répondez à nouveau. – CodeLyokoXtEAM

+0

@GillesGouaillardet Ce code peut renommer n'importe quel fichier/dossier dans un zip sans extraire le fichier dans le dossier tmp. Réponse précédente en faisant l'extraction de fils dans le dossier temporaire. – CodeLyokoXtEAM

Questions connexes