Home > Backend Development > PHP Tutorial > PHP recursively delete files and directories functions_PHP tutorial

PHP recursively delete files and directories functions_PHP tutorial

WBOY
Release: 2016-07-13 10:48:13
Original
821 people have browsed it

Deleting files and directories in php can be done with the rmdir() function, but if you want to delete a non-empty directory, you will not be able to delete it quickly. You must first delete the files in the directory, but there may be subdirectories in the directory. So you need to perform PHP recursive deletion of the directory


A recursive function is a self-calling function. It calls itself directly or indirectly in the function body, but the conditions for self-calling need to be set. If the conditions are met, the function itself is called. If not, the self-calling of this function is terminated, and then the current process is The control is returned to the upper layer function for execution.

Let’s take a look at a classic recursive deletion function

Function: Delete all files under the directory and delete the directory

Function code:

The code is as follows Copy code
 代码如下 复制代码

function deldir($dirname){
if(file_exists($dirname)){//首先判断目录是否有效
$dir = opendir($dirname);//用opendir打开目录
while($filename = readdir($dir)){//使用readdir循环读取目录里的内容
if($filename != "." && $filename != ".."){//排除"."和".."这两个特殊的目录
$file = $dirname."/".$filename;
if(is_dir($file)){//判断是否是目录,如果是则调用自身
deldir($file); //使用递归删除子目录
}else{
@unlink($file);//删除文件
}
}
}
closedir($dir);//关闭文件操作句柄
rmdir($dirname);//删除目录
}
}
?>

使用实例:Public是一个文件夹,里面有许多文件夹和文件,调用deldir($dirname)把它删除

$dir='Public';//传入一个文件夹路径
deldir($dir);//调用函数
?>

function deldir($dirname){ <🎜> If(file_exists($dirname)){//First determine whether the directory is valid <🎜>            $dir = opendir($dirname);//Open the directory with opendir <🎜> ​​​​​while($filename = readdir($dir)){//Use readdir to loop through the contents of the directory <🎜> If($filename != "." && $filename != ".."){//Exclude the two special directories "." and ".." <🎜> $file = $dirname."/".$filename; <🎜> If(is_dir($file)){//Determine whether it is a directory, if so, call itself <🎜>                                                                                                                                                                                                                                                                                                                                                                                                                                @unlink($file);//Delete file <🎜>                                                                                                                                                                                                                                                                                                                                                             closedir($dir);//Close the file operation handle <🎜> ​​​​​​ rmdir($dirname);//Delete directory <🎜> }  <🎜> } <🎜> ?> Usage example: Public is a folder with many folders and files in it. Call deldir($dirname) to delete it $dir='Public';//Pass in a folder path <🎜> deldir($dir);//Call function <🎜> ?>

Instructions: First determine whether Public exists. If so, open Public. Then use readdir to read the contents of the Public directory in a loop. If there are two special directories "." and "..", exclude them. If a folder is encountered, its own processing is called until the condition is not met. If a file is encountered, it will be deleted directly. Finally, the layers jumped out and deleted Public.


Example 2, delete non-empty directory

} @rmdir($path); //This method does not need to determine whether the folder is empty, because no matter whether the folder is empty at the beginning, it will be empty when you get here
The code is as follows
 代码如下 复制代码

/*
 自定义的删除函数,可以删除文件和递归删除文件夹
*/
 function my_del($path)
{
 if(is_dir($path))
 {
   $file_list= scandir($path);
   foreach ($file_list as $file)
   {
    if( $file!='.' && $file!='..')
    {
     my_del($path.'/'.$file);
    }
   }
   @rmdir($path);  //这种方法不用判断文件夹是否为空, 因为不管开始时文件夹是否为空,到达这里的时候,都是空的  
 }
 else
 {
  @unlink($path);    //这两个地方最好还是要用@屏蔽一下warning错误,看着闹心
 }

}


$path='d:/技术文档 - 副本';    //要删除的文件夹

//如果php文件不是ANSI,而是UTF-8模式,而且要删除的文件夹中包含汉字字符的话,调用函数前需要转码
//$path=iconv( 'utf-8', 'gb2312',$path );

my_del($path); 

Copy code

 代码如下 复制代码
<?php
functiondeletedir($dir){
if(!handle=@opendir($dir)){//检测要打开目录是否存在
die("没有该目录");
}
while(false!==($file=readdir($handle))){
if($file!=="."&&$file!==".."){//排除当前目录与父级目录
$file=$dir.DIRECTORY_SEPARATOR.$file;
if(is_dir($file)){
deletedir($file);
}else{
if(@unlink($file)){
echo"文件$file删除成功。
";   
}else{   
echo"文件$file删除失败!
";   
}   
}   
}   
if(@rmdir($dir)){   
echo"目录$dir删除成功了。
n";   
}else{   
echo"目录$dir删除失败!
n";   
}   
}   
 
//测试程序   
$dir="/var/www/test";   
deletedir($dir);   
?>  
/*

Customized deletion function, which can delete files and recursively delete folders
*/
function my_del($path)
{
if(is_dir($path))
{
$file_list= scandir($path);
foreach ($file_list as $file)
{
If( $file!='.' && $file!='..')
{
My_del($path.'/'.$file);

}
} else { @unlink($path); //It’s best to use @ to block warning errors in these two places, which makes it annoying } } $path='d:/Technical Documents - Copy'; //Folder to be deleted //If the php file is not ANSI, but in UTF-8 mode, and the folder to be deleted contains Chinese characters, you need to transcode before calling the function //$path=iconv( 'utf-8', 'gb2312',$path ); my_del($path); Example 3, you can view the reasons for success and failure
The code is as follows Copy code
$fileDeleted successfully.
";  }else{ echo "File$fileDeletion failed!
";  }  }  }  if(@rmdir($dir)){ echo "Directory$dir was deleted successfully.
n";  }else{ echo "Directory$dirDeletion failed!
n";  }  }  //Test program $dir="/var/www/test"; deletedir($dir); ? > Create a folder and file test under the /var/www/test folder shell>touchaaa shell>touchbbb shell>touchccc shell>toucheee shell>touchffff shell>mkdir111 shell>mkdir222 shell>mkdir333 Create and write files in the 111, 222, and 333 folders respectively. I won’t go into details here, and then give them permissions shell>chown[url]www.www[/url]test-R

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/632793.htmlTechArticleDeleting files and directories in php can be done with the rmdir() function, but to delete a non-empty directory, use Quick deletion cannot be performed. The files in the directory must be deleted first, but the directory can...
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template