search
HomeBackend DevelopmentPHP TutorialPHP recursively delete files and directories functions_PHP tutorial

PHP recursively delete files and directories functions_PHP tutorial

Jul 13, 2016 am 10:48 AM
phprmdirandfunctiondeleteexistdocumentTable of contentsrecursion

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

 代码如下 复制代码
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
php functiondeletedir($dir){ if(!handle=@opendir($dir)){//Check whether the directory to be opened exists die("There is no such directory"); }  while(false!==($file=readdir($handle))){ if($file!=="."&&$file!==".."){//Exclude the current directory and parent directory $file=$dir.DIRECTORY_SEPARATOR.$file; if(is_dir($file)){ deletedir($file); }else{ if(@unlink($file)){ echo"File$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...
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
How to make PHP applications fasterHow to make PHP applications fasterMay 12, 2025 am 12:12 AM

TomakePHPapplicationsfaster,followthesesteps:1)UseOpcodeCachinglikeOPcachetostoreprecompiledscriptbytecode.2)MinimizeDatabaseQueriesbyusingquerycachingandefficientindexing.3)LeveragePHP7 Featuresforbettercodeefficiency.4)ImplementCachingStrategiessuc

PHP Performance Optimization Checklist: Improve Speed NowPHP Performance Optimization Checklist: Improve Speed NowMay 12, 2025 am 12:07 AM

ToimprovePHPapplicationspeed,followthesesteps:1)EnableopcodecachingwithAPCutoreducescriptexecutiontime.2)ImplementdatabasequerycachingusingPDOtominimizedatabasehits.3)UseHTTP/2tomultiplexrequestsandreduceconnectionoverhead.4)Limitsessionusagebyclosin

PHP Dependency Injection: Improve Code TestabilityPHP Dependency Injection: Improve Code TestabilityMay 12, 2025 am 12:03 AM

Dependency injection (DI) significantly improves the testability of PHP code by explicitly transitive dependencies. 1) DI decoupling classes and specific implementations make testing and maintenance more flexible. 2) Among the three types, the constructor injects explicit expression dependencies to keep the state consistent. 3) Use DI containers to manage complex dependencies to improve code quality and development efficiency.

PHP Performance Optimization: Database Query OptimizationPHP Performance Optimization: Database Query OptimizationMay 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

Simple Guide: Sending Email with PHP ScriptSimple Guide: Sending Email with PHP ScriptMay 12, 2025 am 12:02 AM

PHPisusedforsendingemailsduetoitsbuilt-inmail()functionandsupportivelibrarieslikePHPMailerandSwiftMailer.1)Usethemail()functionforbasicemails,butithaslimitations.2)EmployPHPMailerforadvancedfeatureslikeHTMLemailsandattachments.3)Improvedeliverability

PHP Performance: Identifying and Fixing BottlenecksPHP Performance: Identifying and Fixing BottlenecksMay 11, 2025 am 12:13 AM

PHP performance bottlenecks can be solved through the following steps: 1) Use Xdebug or Blackfire for performance analysis to find out the problem; 2) Optimize database queries and use caches, such as APCu; 3) Use efficient functions such as array_filter to optimize array operations; 4) Configure OPcache for bytecode cache; 5) Optimize the front-end, such as reducing HTTP requests and optimizing pictures; 6) Continuously monitor and optimize performance. Through these methods, the performance of PHP applications can be significantly improved.

Dependency Injection for PHP: a quick summaryDependency Injection for PHP: a quick summaryMay 11, 2025 am 12:09 AM

DependencyInjection(DI)inPHPisadesignpatternthatmanagesandreducesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itallowspassingdependencieslikedatabaseconnectionstoclassesasparameters,facilitatingeasiertestingandscalability.

Increase PHP Performance: Caching Strategies & TechniquesIncrease PHP Performance: Caching Strategies & TechniquesMay 11, 2025 am 12:08 AM

CachingimprovesPHPperformancebystoringresultsofcomputationsorqueriesforquickretrieval,reducingserverloadandenhancingresponsetimes.Effectivestrategiesinclude:1)Opcodecaching,whichstorescompiledPHPscriptsinmemorytoskipcompilation;2)DatacachingusingMemc

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version