由於經常會遇到定期清除日誌或者定期清除過期文件的需求,網上查閱了部分資料,借鑑了一位大佬的思想方法,有了如下感悟
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這個文件,就會導致如下錯誤:
如果帶上@(示例中的語句):
結果就不會提示錯誤了,可以防止一些非必要的錯誤導致程序的終止。