递归获取文件目录
/**
* opendir 打开一个目录句柄
* isdir 判断是否为一个目录
* readdir 依次读取文件资源句柄
* @param $dir
* @param array $files 对变量值引用,直接改变同一块内存单元
*/
function getDir1($dir,&$files=[])
{
if(is_dir($dir))
{
$handle = opendir($dir);
while($file = readdir($handle))
{
if(!in_array($file,['.','..']))
{
$newfile = $dir . DIRECTORY_SEPARATOR . $file ;
$files[] = $newfile;
if(is_dir($newfile))
{
getDir1($newfile,$files);
}
}
}
}
}
/**
* @param $dir
* scandir 遍历一个目录 , 返回目录中的子目录和文件
* 函数内静态变量,只初始化一次,可以保留变量值
* @return array
*/
function getdir2($dir)
{
static $filesarr ;
$files = scandir($dir);
foreach ($files as $file)
{
if($file != '.' && $file != '..'){
$newfile = $dir . DIRECTORY_SEPARATOR . $file;
$filesarr[] = $newfile;
if(is_dir($newfile))
{
getdir2($newfile);
}
}
}
return $filesarr;
}
/**
* @param $dir 文件目录
* @param array $filesArr
* 在函数内部global实际上是对函数外部同名变量的引用
* @return array
*/
function getdir3($dir,$filesArr=[])
{
global $filesArr;
if(is_dir($dir))
{
$files = scandir($dir);
foreach ($files as $file)
{
if($file != '.' && $file != '..')
{
$newfile = $dir . DIRECTORY_SEPARATOR . $file;
$filesArr[] = $newfile;
if(is_dir($newfile))
{
getdir3($newfile,$filesArr);
}
}
}
}
return $filesArr;
}