使用php压缩/解压缩

时间:2014-04-14 17:14:47

标签: php yii

我正在做一个备份模块,我需要压缩所有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文件夹。

2 个答案:

答案 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/'); //