由于经常会遇到定期清除日志或者定期清除过期文件的需求,网上查阅了部分资料,借鉴了一位大佬的思想方法,有了如下感悟
1.PHP清除目录下的所有文件(测试使用版)
function deldir($path)
{
echo $path;echo PHP_EOL;
//如果是目录则继续
if (is_dir($path)) {
//扫描一个文件夹内的所有文件夹和文件并返回数组
$p = scandir($path);
foreach ($p as $val) {
//排除目录中的.和..
if ($val != "." && $val != "..") {
//如果是目录则递归子目录,继续操作
//is_dir() 函数检查指定的文件是否是一个目录
if (is_dir($path .'/'.$val)) {
//子目录中操作删除文件夹和文件
$this->deldir($path .'/'.$val. '/');
//目录清空后删除空文件夹
@rmdir($path .'/'.$val);
print_r('删除空目录'.$path .'/'.$val);echo PHP_EOL;
} else {
//如果是文件直接删除
unlink($path . $val);
print_r('删除文件'.$path . $val);echo PHP_EOL;
}
}
}
}else{
print_r($path.'不是目录');
}
}
2.参数传递:/test,删除test文件下的所有文件,结果打印如下:
3.PHP清除目录下的所有文件(实际使用版)
function deldir($path)
{
//如果是目录则继续
if (is_dir($path)) {
//扫描一个文件夹内的所有文件夹和文件并返回数组
$p = scandir($path);
foreach ($p as $val) {
//排除目录中的.和..
if ($val != "." && $val != "..") {
//如果是目录则递归子目录,继续操作
if (is_dir($path .'/'.$val)) {
//子目录中操作删除文件夹和文件
$this->deldir($path .'/'.$val. '/');
//目录清空后删除空文件夹
@rmdir($path .'/'.$val);
} else {
//如果是文件直接删除
unlink($path . $val);
}
}
}
}
}
4.补充说明:scandir函数
<?php
$dir = "/images/";
// 以升序排序 - 默认
$a = scandir($dir);
// 以降序排序
$b = scandir($dir,1);
print_r($a);
print_r($b);
?>
输出结果:
Array
(
[0] => .
[1] => ..
[2] => cat.gif
[3] => dog.gif
[4] => horse.gif
[5] => myimages
)
Array
(
[0] => myimages
[1] => horse.gif
[2] => dog.gif
[3] => cat.gif
[4] => ..
[5] => .
)
5.补充说明:函数前面加@,可以屏蔽掉当前函数运行产生的错误
举例如下:
假设要删除当前目录下的test.jpg文件
@unlink(‘test.jpg’);
unlink前不带@的运行结果: 当前目录不存在test.jpg这个文件,就会导致如下错误:
如果带上@(示例中的语句):
结果就不会提示错误了,可以防止一些非必要的错误导致程序的终止。
来源:CSDN
作者:小白的程序猿
链接:https://blog.csdn.net/Hjingeng/article/details/103687180