PHP实例分享之通过递归实现删除目录下的所有文件详解
在PHP中,实现删除一个目录以及目录下的所有文件是一个非常常见的功能。本文将通过逐步讲解的方式,以一个完整的递归函数为例,演示如何实现删除目录下的所有文件。
需求分析
在删除目录下的文件之前,需要先了解该目录下存储的文件种类,匹配到指定的后缀名进行删除。
代码实现
首先我们需要实现一个递归函数 removeDir()
,根据给定的路径遍历目录下的所有文件和子目录。
function removeDir($path)
{
if (is_dir($path)) {
$dirHandle = opendir($path);
while (false !== ($item = readdir($dirHandle))) {
if ($item == '.' || $item == '..') {
continue;
}
$subPath = $path . DIRECTORY_SEPARATOR . $item;
if (is_dir($subPath)) {
removeDir($subPath);
} else {
unlink($subPath);
}
}
closedir($dirHandle);
rmdir($path); // 删除该目录
return true;
} else {
if (file_exists($path)) {
unlink($path);
return true;
} else {
return false;
}
}
}
示例1:删除指定目录下的所有文件
假设要删除的目录位于 /var/www/html/test
,并且要删除该目录下的所有文件。我们可以按照如下方式调用上述函数:
$dirPath = '/var/www/html/test';
if (removeDir($dirPath)) {
echo '目录' . $dirPath . '删除成功';
} else {
echo '目录' . $dirPath . '删除失败';
}
这样就会删除以 /var/www/html/test
为目录的路径下的所有文件和目录。
示例2:删除指定目录下指定后缀名的文件
现在假设要删除 /var/www/html/test
目录下的所有 .txt
后缀名的文件,我们可以使用如下方法:
function removeDirByExt($path, $ext)
{
if (is_dir($path)) {
$dirHandle = opendir($path);
while (false !== ($item = readdir($dirHandle))) {
if ($item == '.' || $item == '..') {
continue;
}
$subPath = $path . DIRECTORY_SEPARATOR . $item;
if (is_dir($subPath)) {
removeDirByExt($subPath, $ext);
} else {
$fileInfo = pathinfo($subPath);
if (isset($fileInfo['extension']) && $fileInfo['extension'] == $ext) {
unlink($subPath);
}
}
}
closedir($dirHandle);
return true;
} else {
if (file_exists($path)) {
$fileInfo = pathinfo($path);
if (isset($fileInfo['extension']) && $fileInfo['extension'] == $ext) {
unlink($path);
}
return true;
} else {
return false;
}
}
}
$dirPath = '/var/www/html/test';
$ext = 'txt';
if (removeDirByExt($dirPath, $ext)) {
echo '目录' . $dirPath . '中的' . $ext . '文件删除成功';
} else {
echo '目录' . $dirPath . '中的' . $ext . '文件删除失败';
}
这样就会删除 /var/www/html/test
目录下所有 .txt
后缀名的文件。
总结
通过使用递归函数,我们可以很方便地实现删除目录下的所有文件。具体实现中还可以根据需求,增加判断条件等功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实例分享之通过递归实现删除目录下的所有文件详解 - Python技术站