PHP利用ZipArchive对网站程序整站打包源代码

寻技术 PHP编程 2023年07月12日 74

PHP利用ZipArchive对网站程序所有目录进行整站打包的源代码分享。

function addFileToZip($path, $zip) {
    $handler = opendir($path); //打开当前文件夹由$path指定。
    /*
    循环的读取文件夹下的所有文件和文件夹
    其中$filename = readdir($handler)是每次循环的时候将读取的文件名赋值给$filename,
    为了不陷于死循环,所以还要让$filename !== false。
    一定要用!==,因为如果某个文件名如果叫'0',或者某些被系统认为是代表false,用!=就会停止循环
    */
    while (($filename = readdir($handler)) !== false) {
        if ($filename != "." && $filename != ".."  && $filename != "out_zip" ) {//文件夹文件名字为'.'和‘..’,不要对他们进行操作
            if (is_dir($path . "/" . $filename)) {// 如果读取的某个对象是文件夹,则递归
                addFileToZip($path . "/" . $filename, $zip);
            } else { //将文件加入zip对象
                $zip->addFile($path . "/" . $filename);
            }
        }
    }
    @closedir($path);
}

$action='zip';

if ($action=='zip'){  
    ini_set('memory_limit','512M'); 
    set_time_limit(180); 
    $path_name="out_zip/web_www.zip";//创建压缩包的路径,在addFileToZip中要排除这个目录,不压缩本身
    
    if (file_exists($path_name)){
        unlink($path_name);//删除文件
        fopen($path_name, "w");//创建压缩包(为了清空文件)
    }else{
        fopen($path_name, "w");//创建压缩包
    }
    
    $zip = new ZipArchive();
    if ($zip->open($path_name, ZipArchive::OVERWRITE) === TRUE) {
        //dirname(__FILE__)  当前绝对路径
        addFileToZip("./", $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
        //$zip->addFile("home.php");//也可以不通过addFileToZip()函数,直接添加文件
        //$zip->addFile("Android/index.php");
        $zip->close(); //关闭处理的zip文件
        echo "压缩包压缩成功";
    }else{
        echo "启动失败";
    }
}


关闭

用微信“扫一扫”