如何压缩所有目录,包括根目录?

时间:2019-03-07 15:56:47

标签: javascript php

在我的PHP脚本中,我想压缩所有目录,包括根目录

例如,我的脚本文件是 /practice/zip/index.php ,而我想压缩整个 / practice

到目前为止,我的脚本仅压缩当前目录:

  <?php
/ * ZIP文件名和路径* /
$ zip_file ='files.zip';

/ *排除文件* /
$ exclude_files = array();
$ exclude_files [] = realpath($ zip_file);
$ exclude_files [] = realpath('zip.php');

/ *当前文件夹的路径,当前文件夹需要为空或空参数* /
$ root_path = realpath();

/ *初始化存档对象* /
$ zip =新的ZipArchive;
$ zip_open = $ zip-> open($ zip_file,ZipArchive :: CREATE);

/ *创建递归文件列表* /
$ files = new RecursiveIteratorIterator(
    新的RecursiveDirectoryIterator($ root_path),
    RecursiveIteratorIterator :: LEAVES_ONLY
);

/ *对于每个文件,获取每个路径并将其添加到zip中* /
if(!empty($ files)){

    foreach($ files as $ name => $ file){

        / *获取文件的路径* /
        $ file_path = $ file-> getRealPath();

        / *仅当它是文件而不是目录且不排除在外时。 * /
        if(!is_dir($ file_path)&&!in_array($ file_path,$ exclude_files)){

            / *获取相对路径* /
            $ file_relative_path = str_replace($ root_path,'',$ file_path);

            / *将文件添加到zip存档* /
            $ zip_addfile = $ zip-> addFile($ file_path,$ file_relative_path);
        }
    }
}

/ *关闭对象后创建ZIP。 * /
$ zip_close = $ zip-> close();
?>
 

1 个答案:

答案 0 :(得分:0)

尝试使用dirname()。

http://php.net/manual/en/function.dirname.php

例如:

$root_path = "/practice/zip";
echo dirname($root_path);

将返回:/practice

通过dirname()函数的第二个可选参数,您可以设置向上移动多少个父目录。