首页 / php开发 / PHP中目录的基本操作

PHP中目录的基本操作

2020-09-08 09:08 php开发 阅读 4601 来源


常用函数

函数名
意义
basename
解析路径获取文件名
dirname
去掉路径的最后一层
pathinfo
将路径解析成数组
$handle=opendir($dirname)
打开一个路径,获得一个资源对象(句柄)
while($file=readdir($handle))
读取路径内的文件
closedir($handle)
关闭资源对象
rmdir
删除空目录
unlink
删除文件
mkdir(“1/2/3”, 0777, true)
递归创建目录

basename()获取文件名

//包含有指向一个文件的全路径的字符串
$path = "/var/www/html/page.php";

//显示带有文件扩展名的文件名,输出page.php
echo basename($path);

//显示不带有文件扩展名的文件名,输出page
echo basename($path,".php");

dirname()去掉文件名的目录名

//包含有指向一个文件的全路径的字符串
$path = "/var/www/html/page.php";

//返回目录名/var/www/html
echo dirname($path);

//返回目录名c:/
echo dirname('c:/');

pathinfo()获取文件名/基本名/扩展名的关联数组

//包含有指向一个文件的全路径的字符串
$path = "/var/www/html/page.php";
//返回包括指定路径中的目录名、基本名和扩展名关联数组
$path_parts=pathinfo($path);

//输出目录名/var/www/html
echo $path_parts["dirname"];

//输出基本名page.php
echo $path_parts["basename"];

//输出扩展名.php
echo $path_parts["extension"];

PHP遍历目录实例

function dir_info($path)
{
    $result = [];
    $handle = opendir($path);
    while($file = readdir($handle)) {
        $array = [];
        if(substr($file, 0, 1) == ".")
        {
            continue;
        }
        $array["name"] = $file;
        $array["type"] = filetype($path."/".$file);
        $array["size"] = filesize($path."/".$file);

        $result[] = $array;
    }
    closedir($handle);
    return $result;
}

$path = "/Users/Aaron";

统计目录大小

//自定义一个函数dir_size(),统计传入参数的目录大小
function dir_size($directory)
{
    //整型变量初值为0,用来累加各个文件大小从而计算目录大小
    $dir_size = 0;

    //打开目录,并判断是否能成功打开
    if ($dir_handle = @opendir($directory)) {
        //循环遍历目录下的所有文件
        while ($filename = readdir($dir_handle)) {
            //一定要排除两个特殊的目录
            if ($filename != "." && $filename != "..") {
                //将目录下的子文件和当前目录相连
                $subFile = $directory . "/" . $filename;
                //如果为目录
                if (is_dir($subFile))
                    //递归地调用自身函数,求子目录的大小
                    $dir_size += dir_size($subFile);
                //如果是文件
                if (is_file($subFile))
                    //求出文件的大小并累加
                    $dir_size += filesize($subFile);
            }
        }

        //关闭文件资源
        closedir($dir_handle);
        //返回计算后的目录大小
        return $dir_size;
    }
}

//调用该函数计算目录大小,返回目录大小的字节数
$dir_size=dirSize("./");

//将获取的目录字节数转换为“KB”单位并输出
echo round($dir_size/pow(1024,1),2)."KB";

建立和删除目录

mkdir("php");

//递归建立目录
mkdir("/var/www/php", 0777, true);
//自定义函数递归的删除整个目录
function rm_dir($directory) {
    //判断目录是否存在,如果不存在rmdir()函数会出错
    if(file_exists($directory)) {
        //打开目录返回目录资源,并判断是否成功
        if($dir_handle=@opendir($directory)) {
            //遍历目录,读出目录中的文件或文件夹
            while($filename=readdir($dir_handle)) {
                //一定要排除两个特殊的目录
                if($filename!="." && $filename!="..") {
                    //将目录下的文件和当前目录相连
                    $sub_file=$directory."/".$filename;
                    //如果是目录条件则成立
                    if(is_dir($sub_file)) {
                        //递归调用自己删除子目录
                        rm_dir($sub_file);
                    }

                    //如果是文件条件则成立
                    if(is_file($sub_file)){
                        //直接删除这个文件
                        unlink($sub_file);
                    }
                }
            }

            //关闭目录资源
            closedir($dir_handle);
            //删除空目录
            rmdir($directory);
        }
    }
}

//调用del_dir()函数,将程序所在目录中的"test"文件夹删除
调用del_dir("test");

复制和移动目录

//自定义函数递归的复制带有多级子目录的目录
function copy_dir($dir_src, $dir_to) {
    //如果目标不是一个目录,是一个已存在的文件则退出
    if(is_file($dir_to)) {
        echo "目标不是目录不能创建!!";
        //退出函数
        return;
    }

    //如果目标目录不存在则创建,存在则不变
    if(!file_exists($dir_to)) {
        //创建目录目录
        mkdir($dir_to);
    }

    //打开目录返回目录资源,并判断是否成功
    if($handle=@opendir($dir_src)) {
        //遍历目录,读出目录中的文件或文件夹
        while($filename=readdir($handle)) {
            //一定要排除两个特殊的目录
            if($filename!="." && $filename!="..") {
                //将源目录的多级子目录连接
                $sub_src_file=$dir_src."/".$filename;
                //将目标目录的多级子目录连接
                $subToFile=$dir_to."/".$filename;
                //如果源文件是一个目录
                if(is_dir($sub_src_file)){
                //递归调用自己复制子目录
                    copy_dir($sub_src_file, $sub_to_file);
                }
                //如果源文件是一个普通文件
                if(is_file($sub_src_file)){
                    //直接复制到目标位置
                    copy($sub_src_file, $sub_to_file);
                }
            }
        }

        closedir($handle);       //关闭目录资源
    }
}

//测试函数,将目录"test"复制到"D:/admin"
copy_dir("test", "D:/admin");


猜你喜欢