php递归函数删除目录
在php中要复制一个包含多个子目录的目录,将涉及文件的复制、目录创建等操作。复制一个文件可以通过PHP提供的copy()函数完成,创建目录可以使用mkdir()函数。定义函数时,首先对源目录进行遍历,如果遇到的是普通文件,直接使用copy()函数进行复制。如果遍历时遇到一个目录,则必须建立该目录,然后再对该目录下的文件进行复制操作,如果还有子目录,则使用递归重复操作,最终将整个目录复制完成。
例子,自定义的递归函数复制目录。
复制代码 代码示例:
<?php
//
自定义函数递归的复制带有多级子目录的目录
function copyDir($dirSrc,$dirTo){
if(
is_file($dirTo)){ //如果目标不是一个目录则退出
echo "目标不是目录不能创建!!";
return; //退出函数
}
if(!
file_exists($dirTo)){ //如果目标不是一个目录则退出
mkdir($dirTo); //创建目录
}
if($dir_handle = @opendir($directory)){ //打开目录,并判断是否能成功打开
while($filename = readdir($dir_handle)){ //循环
遍历目录下的所有文件
if($filename != "."&& $filename != ".."){ //一定要排除两个特殊的目录
$subFile = $directory."/".$filename; //将目录下的子文件和当前目录相连
$sunToFile = $dirTo."/".$filename; //将目标目录的多级子目录相连
if(is_dir($subSrcFile)) //如果为目录则条件成立
copyDir($subSrcFile,$subToFile); //
递归调用自己复制子目录
if(is_file($subSrcFile)) //如果是文件则条件成立
copy($subSrcFile,$subToFile); //直接复制到目标位置
}
}
lo
sedir($dir_handle); //关闭文件资源
}
}
//测试函数,将目录“
phpmyadmin”复制到“D:/admin”
copyDir("phpMyAdmin","D:/admin");
?>
从安全和跨平台等方面考虑,尽量不要去调用操作系统的shell命令“cp-a”完成目录的复制。
二、php创建和删除目录函数介绍和递归删除目录函数
php创建和删除目录函数介绍和递归删除目录函数,理解下递归删除目录的自定义函数的实现方法。
mkdir() — 新建目录
– 语法:bool mkdir (string pathname [,int mode])
– 尝试新建一个由 pathname 指定的目录。
rmdir() — 删除目录
– 语法:bool rmdir ( string dirname )
– 尝试删除 dirname 所指定的目录。 该目录必须是空的,而且要有相应的权限。如果成功则返回 TRUE,失败则返回
FALSE。
unlink — 删除文件
– 语法:bool unlink ( string filename )
– 删除 filename。和 Unix C 的 unlink() 函数相似。如果成功则返回 TRUE,失败则返回 FALSE。
在PHP中,使用mkdir()函数只需要传入一个目录名即可很容易地建立一个新目录。但删除目录所使用的函数rmdir(),只能删除一个空目录并且目录必须存在。如果是非空的目录就需要先进入到目录中,使用unlink()函数将目录中的每个文件都删除掉,再回来将这个空目录删除。如果目录中还存在目录,而且子目录也非空,就要使用递归的方法了。
例子,自定义递归函数删除目录:
复制代码 代码示例:
<?php
//自定义函数递归的删除整个目录
function delDir($directory){
if(file_exists($directory)){ //如果不存在rmdir()函数会出错
if($dir_handle = @opendir($directory)){ //打开目录,并判断是否能成功打开
while($filename = readdir($dir_handle)){ //循环遍历目录下的所有文件
if($filename != "."&& $filename != ".."){ //一定要排除两个特殊的目录
$subFile = $directory."/".$filename; //将目录下的子文件和当前目录相连
if(is_dir($subFile))//如果为目录则条件成立
delDir($subFile); //递归地调用自身函数,删除子目录
if(is_file($subFile)) //如果是文件则条件成立
unlink($subFile); //直接删除这个文件
}
}
closedir($dir_handle); //关闭文件资源
rmdir($directory); //删除空目录
}
}
}
dirDir("phpMyAdmin"); //调用delDir()函数,将程序所在目录中的“phpMyAdmin”文件删除
?>
当然也可以通过调用操作系统命令“rm-rf”删除非空的目录,但也要从安全和跨平台方面考虑尽量不要去使用。
三、php自定义函数之递归删除文件及目录
自定义函数之递归删除文件及目录的php代码
例子:
复制代码 代码示例:
<?php
/*—————————————————— */
//– 递归删除文件及目录
//– 例: del_dir (‘../cache/');注意:返回的/是必须的
//– $type 强制删除目录, true 是 ,false 否
/*—————————————————— */
function del_dir ($dir,$type=true)
{
$n=0;
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
//.svn 忽略 svn 版本控制信息
if ( $file == '.' or $file =='..' or $file == '.svn')
{
continue;
}
if (is_file ($dir.$file))
{
unlink($dir.$file);
$n++;
}
if (is_dir ($dir.$file))
{
del_dir ($dir.$file.'/');
if ($type)
{
$n++;
rmdir($dir.$file.'/');
}
}
}
}
closedir($dh);
}
return $n;
}
四、php递归函数删除整个目录
php实现用于删除整个目录的递归函数,包括php递归算法与目录技巧。
例子,php实现用于删除整个目录的递归函数。
复制代码 代码示例:
<?php
function delete_directory($dir) {
if ($dh = @opendir($dir)) {
while (($file = readdir ($dh)) != false) {
if (($file == ".") || ($file == "..")) continue;
if (is_dir($dir . '/' . $file))
delete_directory($dir . '/' . $file);
else
unlink($dir . '/' . $file);
}
@closedir($dh);
rmdir($dir);
}
}
$dir = "./fakeDir";
delete_directory($dir);
?>