在我的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();
?>
答案 0 :(得分:0)
尝试使用dirname(
)。
http://php.net/manual/en/function.dirname.php
例如:
$root_path = "/practice/zip";
echo dirname($root_path);
将返回:/practice
通过dirname()
函数的第二个可选参数,您可以设置向上移动多少个父目录。