我正在做一个备份模块,我需要压缩所有webapp文件夹,我使用这个方法:
function agregar_zip($dir, $zip){
if (is_dir($dir)) {
if ($da = opendir($dir)) {
while (($archivo = readdir($da))!== false) {
if (is_dir($dir . $archivo) && $archivo!="." && $archivo!=".."){
agregar_zip($dir.$archivo . "/", $zip);
}elseif(is_file($dir.$archivo) && $archivo!="." && $archivo!=".."){
$zip->addFile($dir.$archivo, $dir.$archivo);
}
}
closedir($da);
}
}
}
$zip = new ZipArchive();
$dir = Yii::app()->basePath.'/../';
$rutaFinal="c:/xampp/htdocs/";
$archivoZip = "backup.zip";
if($zip->open($archivoZip,ZIPARCHIVE::CREATE)===true) {
agregar_zip($dir, $zip);
$zip->close();
@rename($archivoZip, "c:/xampp/htdocs/backup.zip");
if (file_exists($rutaFinal.$archivoZip)){
}else{
Yii::app()->params['errores'] = Yii::app()->params['errores']."</br>No se ha creado el ZIP con éxito.";
}
}
当我打开file.zip时,我有这样的结构:
C:/ - &gt; xampp-&gt; htdocs-&gt; mywebapp(这是我需要的全部)
但如果我这样做&#34;在这里提取&#34;它解压缩了正确的内容,但如果我使用php,它会在目的地中创建一个名为xampp的文件夹,在其中htdocs,在其中mywebapp(使用正确的内容)。
我只需要压缩app文件夹而不是所有路径。这种方式当我用php解压缩时只解压缩app文件夹。
答案 0 :(得分:0)
我认为您需要删除&#34; /../"从这一行
$dir = Yii::app()->basePath.'/../';
应该是
$dir = Yii::app()->basePath;
答案 1 :(得分:0)
有更好的方法用yii制作拉链。 Yii有一个拉链extension。
上述文档中的使用示例:
向Yii介绍EZip。将定义添加到CWebApplication配置文件(main.php)
'components'=>array(
...
'zip'=>array(
'class'=>'application.extensions.zip.EZip',
),
...
),
现在您可以按如下方式访问EZip方法:
$zip = Yii::app()->zip;
$zip->makeZip('./','./toto.zip'); // make an ZIP archive
var_export($zip->infosZip('./toto.zip'), false); // get infos of this ZIP archive (without files content)
var_export($zip->infosZip('./toto.zip')); // get infos of this ZIP archive (with files content)
$zip->extractZip('./toto.zip', './1/'); //