Home  >  Article  >  Backend Development  >  Detailed explanation of how to delete a specified folder in PHP

Detailed explanation of how to delete a specified folder in PHP

小云云
小云云Original
2018-02-01 13:05:402180browse

This article mainly brings you an example of how to delete a specified folder in PHP. The editor thinks it is quite good, so I will share it with you now and give it as a reference for everyone. Let’s follow the editor to take a look, I hope it can help everyone.

1. Foreword

Goal: PHP deletes a specified directory

The PHP functions used: is_dir, opendir, readdir, scandir, rmdir , closedir, etc. (Note: Other file operation functions can also be completed, only the functions used this time are listed here)

2. Introduction to related functions

The method of php file operation is roughly the same , has been introduced in the previous article, so I will not repeat it here. Here I will introduce a new function

rmdir

For details, refer to: http:/ /www.w3school.com.cn/php/func_filesystem_rmdir.asp

3. Code composition

**
 * [delAllFile description] 删除指定目录
 * @param [type] $dirName [description] 目录
 * @param [type] $file [description] 记录的过程文件
 * @param integer $type [description] 第一次默认打开新文件,第二次调用不打开
 * @return [type]   [description]
 */
public function delAllFile($dirName, $file, $type = 1) {
 $re = $this->checkDir($dirName);
 //默认第一次打开文件
 if($type){
 $file = fopen($file, 'w');//打开日志文件
 }
 if($re){
 $this->delFile($dirName, $file);
 }else{
 fwrite($file,"{$dirName}清理完成\r\n");
 }
}
/**
 * [checkDir description] 检测文件夹是否为空,为空直接删除
 * @param [type] $dirName [description] 文件夹名
 * @return [type]   [description]
 */
private function checkDir($dirName) {
 $a = scandir($dirName);//列出 images 目录中的文件和目录:
 //只包含.和..目录的文件夹为空文件夹
 if(sizeof($a) == 2){
 rmdir($dirName);
 return false;
 }
 return true;
}
/**
 * [delFile description] 上传文件的方法
 * @param [type] $dirName [description] 目录
 * @param [type] $file [description] 记录的文件
 * @return [type]   [description]
 */
private function delFile($dirName, $file) {
 $dh = openDir($dirName);
 while($handle = readdir($dh)){
 if($handle == '.' || $handle == '..') {
 continue;
 }
 $resource = $dirName.'/'.$handle;
 //判断是否是文件夹
 if(is_dir($resource)) {
 //判断文件夹是否为空
 $re = $this->checkDir($dirName);
 if($re){
 $this->delAllFile($resource, $file, 0);
 }else{
 fwrite($file,"{$resource}清理完成\r\n");
 continue;
 }
 }else{
 unlink($resource);
 }
 }
 
 //关掉资源,删除目录
 closedir($dh);//关闭目录资源 
 fwrite($file,"{$dirName}清理完成\r\n");
 rmdir($dirName);//删除空目录 
}

However, when the above code encounters a high subdirectory level, a warning will easily appear. , resulting in the directory being unable to be deleted

Therefore, for high-level subsets, a loop judgment needs to be added at the end to determine whether it can be deleted to avoid this error

// //关掉资源,删除目录
// closedir($dh);//关闭目录资源 
// fwrite($file,"{$dirName}清理完成\r\n");
//rmdir($dirName);//删除空目录 
 
//每次目录层级高了就报错,故加个循环处理
$i = 1;
while($i){
 $re = $this->checkDir($dirName);
 echo "$dirName $i 次<br/><hr/>";
 $i++;
 if(!$re){
  $i = 0;
  closedir($dh);//关闭目录资源 
  fwrite($file,"{$dirName}清理完成\r\n");  
 }
}

Adding this layer can avoid the situation of being unable to delete (sometimes the inability to delete is a permissions issue)

4. Conclusion

Deleting a directory is relatively simple. The basic steps are: :

1. Determine whether it is a directory. If it is a directory, call yourself recursively, otherwise delete the file directly;

2. Determine whether the directory is empty. If it is not empty, rmdir will throw an error;

3. File permissions issue (window, this is not a problem)

Related recommendations:

Detailed explanation of how to use PHP to batch clear and delete all contents of a specified folder

The above is the detailed content of Detailed explanation of how to delete a specified folder in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
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