遍历文件夹
方式一:递归遍历文件夹
/**
* 递归遍历文件夹
* @param string $dir
* @return array
* 返回一个数组 结构为:
* array{
* 'dirs'=>[], 指定目录下的文件夹列表
* 'files'=>[],指定目录下的文件列表
* }
*/
function scanfDir1($dir = '', &$ret = array())
{
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$cur_path = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($cur_path)) {
$ret['dirs'][] = $cur_path;
scanfDir1($cur_path, $ret);
} else {
$ret ['files'] [] = $cur_path;
}
}
}
closedir($handle);
}
return $ret;
}
方式二:递归遍历文件夹:与上述方式一样,只不过是用内置函数scandir()代替opendir()和readdir()的过程
/**
* 递归遍历文件夹:与上述方式一样,只不过是用内置函数scandir()代替opendir()和readdir()的过程
* @param string $dir
* @return array
* 返回一个数组 结构为:
* array{
* 'dirs'=>[], 指定目录下的文件夹列表
* 'files'=>[],指定目录下的文件列表
* }
*/
function scanfDir2($dir = '', &$ret = array())
{
if (!is_dir($dir)) {
return array();
}
$arr = scandir($dir); //扫描一个文件夹内的所有文件夹和文件并返回数组
foreach ($arr as $key => $value) {
if ($value != "." && $value != "..") {
$cur_path = $dir . DIRECTORY_SEPARATOR . $value;
if (is_dir($cur_path)) {
$ret['dirs'][] = $cur_path;
scanfDir2($cur_path, $ret);
} else {
$ret ['files'] [] = $cur_path;
}
}
}
return $ret;
}
删除文件夹
方式一:递归删除文件夹
/**
* 删除目录
* @param string $dir 目录地址
*/
function delDir1($dir)
{
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
$cur_path = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($cur_path)) {
delDir1($cur_path);
} else {
@unlink($cur_path);
}
}
}
}
@rmdir($dir);
}
方式二:递归删除文件夹,与上述方式一样,只不过是用内置函数scandir()代替opendir()和readdir()的过程
/**
* 删除目录:与上述方式一样,只不过是用内置函数scandir()代替opendir()和readdir()的过程
* @param string $dir 目录地址
*/
function delDir2($dir)
{
if (!is_dir($dir)) {
return;
}
$arr = scandir($dir);//扫描一个文件夹内的所有文件夹和文件并返回数组
foreach ($arr as $key => $value) {
if ($value != "." && $value != "..") {
$cur_path = $dir . DIRECTORY_SEPARATOR . $value;
if (is_dir($cur_path)) {
delDir2($cur_path);
} else {
@unlink($cur_path);
}
}
}
@rmdir($dir);
}