如何使用PHP压缩当前根目录(不包括文件和目录)

如何使用PHP压缩当前根目录(不包括文件和目录),php,recursion,zip,exclusionpath,Php,Recursion,Zip,Exclusionpath,我需要在更新PHP应用程序之前执行备份任务。我试图在linux上使用PHP找到与此命令等效的命令 zip -r tmp/1.01b.zip * -x tmp/**\* config/config.php 我已经看过一些用PHPzip构建的ZipArchive类,但是我在排除和递归方面遇到了困难。这是我第一次使用这个类 以下是位于以下位置的整洁脚本: 以下是我的地址: 公共功能备份(){ $files=new recursive迭代器(new recursivedirectoryinterato

我需要在更新PHP应用程序之前执行备份任务。我试图在linux上使用PHP找到与此命令等效的命令

zip -r tmp/1.01b.zip * -x tmp/**\* config/config.php
我已经看过一些用PHPzip构建的ZipArchive类,但是我在排除和递归方面遇到了困难。这是我第一次使用这个类

以下是位于以下位置的整洁脚本:

以下是我的地址:

公共功能备份(){
$files=new recursive迭代器(new recursivedirectoryinterator('tmp/'),recursiveiterator::SELF_FIRST);
$Exclutions=[];
foreach($files作为$file){
数组推送($Exclutions,$file);
}
数组push($excluses,'config/config.php');
数组推送($Exclutions,'tmp/backup-'.$this->site['version'..zip');
$this->Zip('/','tmp/backup-'.$this->site['version'..Zip',false,$exclusions);
}
公共函数Zip($source、$destination、$include\u dir=false、$exclusions=false){
//删除现有存档
如果(文件_存在($destination)){
取消链接(目的地);
}
$zip=新的ZipArchive();
如果(!$zip->open($destination,ZIPARCHIVE::CREATE)){
返回false;
}
$source=str\u replace('\\','/',realpath($source));
if(is_dir($source)==true){
$files=new recursiveiterator(new recursivedirectoryinterator($source),recursiveiterator::SELF_FIRST);
如果($include_dir){
$arr=爆炸(“/”,$source);
$maindir=$arr[计数($arr)-1];
$source=“”;
对于($i=0;$iaddEmptyDir($maindir);
}
foreach($files作为$file){
//忽略“.”和“.”文件夹
$file=str\u replace(“\\\”、“/”、$file);
if(在数组(substr($file,strrpos($file,“/”)+1)中,数组(“.”,“…”)){
继续;
}
//添加排除
if(($Exclutions)&(is_数组($Exclutions))){
if(在数组中(str_replace($source.'/','.$file),$exclusions)){
继续;
}
}
$file=realpath($file);
if(is_dir($file)==true){
$zip->addEmptyDir(str_replace($source.'/','$file.'/');
}elseif(is_file($file)==true){
$zip->addFromString(str_replace($source.'/','',$file),file_get_contents($file));
}
}
}elseif(is_文件($source)==true){
$zip->addFromString(basename($source),file_get_contents($source));
}
返回$zip->close();
}

但现在当我运行脚本时,它似乎无休止地运行。我认为它是在试图将自己归档。但我不确定如何验证或防止这种情况。

发现了我的问题。因为我想备份应用程序的当前目录,所以我尝试将“/”作为源目录,而应该使用“/”

public function backup(){
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('tmp/'), RecursiveIteratorIterator::SELF_FIRST);
    $exclusions = [];
    foreach ($files as $file){
        array_push($exclusions,$file);
    }
    array_push($exclusions,'config/config.php');
    array_push($exclusions,'tmp/backup-'.$this->site['version'].'.zip');
    $this->Zip('.','tmp/backup-'.$this->site['version'].'.zip', false, $exclusions);
}

“但我在排除方面遇到了困难”-然后请展示您的尝试,并解释这些困难是什么…仅仅说明您面临的困难,并不是一个实际的问题。请阅读。@CBroe很抱歉,我添加了代码和一些关于我希望它做什么的解释。@CBroe我已经编辑了我的问题,并保留了脚本的当前状态。还添加了我与之相关的问题。
public function backup(){
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('tmp/'), RecursiveIteratorIterator::SELF_FIRST);
    $exclusions = [];
    foreach ($files as $file){
        array_push($exclusions,$file);
    }
    array_push($exclusions,'config/config.php');
    array_push($exclusions,'tmp/backup-'.$this->site['version'].'.zip');
    $this->Zip('.','tmp/backup-'.$this->site['version'].'.zip', false, $exclusions);
}