php获取某一目录包含的所有目录和文件

本文介绍两个PHP函数:deepScanDir用于递归扫描指定目录并返回所有子目录及文件;getDirFiles则专注于获取目录下所有文件的完整路径。通过这两个函数可以方便地实现文件系统中的目录与文件管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
/**
 * 取得输入目录所包含的所有目录和文件
 * 以关联数组形式返回
 * @param str $dir 目录名
 * @param int $level 深度
 * @return arr array('dir'=>array(...), 'file'=>array(...))
 * @author qifei
 */
function deepScanDir($dir, $level=-1)
{
	if ($level == 0) {
		return array('dir'=>array(), 'file'=>array());
	}
    $fileArr = array();
    $dirArr = array();
    $dir = rtrim($dir, '\/');
    if(is_dir($dir)){
        $dirHandle = opendir($dir);
        while(false !== ($fileName = readdir($dirHandle))){
            $subFile = $dir . DIRECTORY_SEPARATOR . $fileName;
            if(is_file($subFile)){
                $fileArr[] = $subFile;
            } elseif (is_dir($subFile) && str_replace('.', '', $fileName)!=''){
                $dirArr[] = $subFile;
                $arr = deepScanDir($subFile, $level==-1?-1:$level-1);
                $dirArr = array_merge($dirArr, $arr['dir']);
                $fileArr = array_merge($fileArr, $arr['file']);
            }
        }
        closedir($dirHandle);
    }
    return array('dir'=>$dirArr, 'file'=>$fileArr);
}

//示例1
$dir = '/data/www/image';
$arr = deepScanDir($dir, 1);
print_r($arr);




/**
 * 取得输入目录所包含的所有文件
 * 以数组形式返回
 * @param str $dir 目录名
 * @param int $level 深度
 * @return arr array(...)
 * @author qifei
 */
function getDirFiles($dir, $level=-1)
{
	if ($level == 0) {
		return array();
	}
    if (is_file($dir)) {
        return array($dir);
    }
    $files = array();
    if (is_dir($dir) && ($dir_p = opendir($dir))) {
        $ds = DIRECTORY_SEPARATOR;
        while (($filename = readdir($dir_p)) !== false) {
            if ($filename=='.' || $filename=='..') { continue; }
            $filetype = filetype($dir.$ds.$filename);
            if ($filetype == 'dir') {
                $files = array_merge($files, getDirFiles($dir.$ds.$filename, $level==-1?-1:$level-1));
            } elseif ($filetype == 'file') {
                $files[] = $dir.$ds.$filename;
            }
        }
        closedir($dir_p);
    }
    return $files;
}

//示例2
$dir = '/data/www/image';
$arr = getDirFiles($dir, 1);
print_r($arr);
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值