12.目录操作

目录操作

1.目录相关操作

1. 创建目录

  • mkdir()

  • @parma1 要创建的目录路径

  • @parma2 访问权 (默认0777)

  • @parma3 是否允许嵌套创建(默认false)

  • 返回值: 成功 true 失败false

if(!file_exists('./mydir')){  // 来判断一下要创建的目录是否存在
	mkdir('./mydir');   // 不存在,创建
} else {
    echo '该目录存在';
}

2.删除目录

  • rmdir()
  • @parma1 要删除的目录路径 (该目录必须是空的,即无法嵌套删除)
  • @parma2 访问权限
  • 返回值: 成功 true 失败false

3.判断是否是目录

  • is_dir()
  • @parma 要判断的目录路径
  • 返回值: 是返回true 不是返回false

4.判断目录是否存在

  • file_exists(和判断文件一样)

5.返回路径中的目录部分

  • dirname()
  • @parma 路径信息
  • 返回值: 返回路径中的目录部分

6.获取文件名

  • basename()
  • @parma 路径信息
  • 返回值: 返回路径中的文件信息 失败返回false

7. 返回路径信息

  • pathinfo()
  • @parma 路径信息
  • 返回值: Array,一个包含目录(dirname),文件名(basename),文件后缀(前提是文件不是文件夹),文件名称(不带后缀)
var_dump(dirname('D:\wamp64\www\Practice\留言板\del.php'));  // 文件目录
var_dump(basename('D:\wamp64\www\Practice\留言板\del.php'));  // 文件信息
var_dump(pathinfo('D:\wamp64\www\Practice\留言板\del.php'));  // 整个路径

image-20220417164943673

8.打开---读取---关闭目录

  1. 打开文件opendir()
    • @parma 文件路径
    • 返回值; 由opendir()打开目录成功返回的资源
    1. 读取目录readdir()
    • **每个目录下都有两个隐藏的目录当前看目录 . 上一级目录 .. **image-20220417170748112
    • @parma: 由opendir()打开目录成功返回的资源
    • 返回值: 读取成功返回读到的文件名,读取失败返回或者读取到目录的最后时返回false
    • 注意: 第一次读的时候会读到 . (当前目录) 第二次读读到 .. (上一级目录) 而起每次只读一次
    1. 关闭目录closedir()
    • @parma 资源
    • 无返回值

9.统计目录及文件个数(自己创建)

<?php
// 现在外部定义好各自的数量
$fileCount = 0;
$dirCount = 0;
function dfNum($path) {  // 传入要检查的目录
    global $fileCount, $dirCount;  // 变成全局变量用于计算
    // 打开文件
    $resource = opendir($path);
    //读取文件
    while ($name = readdir($resource)) {  // 读到末尾返回false,则可用while循环读取
         // 防止死循环,过滤掉 . 与 ..
        if($name != '.' && $name != '..') { 
            // 要给完整的(相对/绝对)路径,不然判断目录时会当做文件夹
            $newPath = $path.'/'.$name;
			 // 判断是目录还是文件
            if(is_dir($newPath)) {
                // 是目录+1 接着在调用自己,递归函数
                dfNum($newPath, $dirCount, $fileCount);
                $dirCount ++;
            } else {
                // 是文件+1
                $fileCount ++;
            }
        }
    }
    //关闭文件
    closedir($resource);
}
echo '目录数目: '.$dirCount.'<br/>';
echo '文件数目: '.$fileCount;
?>

10.删除目录(自定义可用于嵌套目录)

<?php
function dirDel($path) {
    // 打开目录
    $resource = opendir($path);
    // 读取目录
    while($name = readdir($resource)) {
        // 过滤 . 与 .. 一定要过滤!!!!!不然文件就没了
        if($name != '.' && $name != '..') {
            $newPath = $path.'/'.$name;
            if(is_dir($newPath)) {
                // 是目录
                dirDel($newPath);
            } else {
                // 是文件 $name就是文件的名字,$path及时文件的路径,即$newPath
                unlink($newPath);
                echo "删除文件: ".$name."成功".'<br/>';
            }
        }
    }
    // 关闭文件
    closedir($resource);
    /*** 上边执行完就说明当前根目录下子文件夹空了则可以直接删除了 ***/
    rmdir($path);
    echo '删除目录'.$path.'成功'.'<hr/>';
}
?>

11.统计目录大小(自定义)

<?php
function dirSize($path) {
    // 文件大小初始化
    $dirSize = 0;
    // 打开文件
    $resource = opendir($path);
    // 读取文件
    while($name = readdir($resource)) {
        if($name != '.' && $name != '..') {  // 过滤点点
            // 拼接新的路径
            $newPath = $path . '/' . $name;
            // 是目录
            if(is_dir($newPath)) {
                // 自己调用自己
                // 有返回值,要加上
                $dirSize +=dirSize($newPath);
            } else {
                // 是文件,统计大小
                $dirSize += filesize($newPath);
            }
        } 
    }
    // 关闭文件
    closedir($resource);
    return $dirSize;
}
?>

12.移动及重命名目录(自定义)

<?php
// 整体思想是 先按照目录创建一个新的或是重命名完的目录然后删除原来的目录
function removeDir($dirsrc, $dirto) {
    // 判断目标是不是目录
    if(is_file($dirto)) {
        echo '目标不是目录无法操作';
        return ;
    }
    if(!file_exists($dirto)) {
        mkdir($dirto);
        echo '创建目录'.$dirto.'成功'."<br/>";
    }
    // 打开源文件
    $resource = opendir($dirsrc);
    // 读取源文件
    while($name = readdir($resource)) {
        // 过滤点点
        if($name != '.' && $name != '..') {
            // 拼接源路径
            $srcPath = $dirsrc . '/' . $name;
            // 拼命目标路径
            $toPath = $dirto . '/' . $name;
            // 判断文件还是目录
            if(is_dir($srcPath)) {
                // 是目录 回调
                removeDir($srcPath, $toPath);
            } else {
                // 是文件 移动
                rename($srcPath, $toPath);
                echo '移动文件' . $srcPath . '成功' . '<br/>';
            }
        }
    }
    // 关闭目录
    closedir($resource);
    // 删除源文件的空目录
    rmdir($dirsrc);
}
?>

13.复制目录(自定义)

<?php
function copyDir($dirsrc, $dirto) {
    // 判断是不是目录
    if(!is_dir($dirsrc)) {
        echo '目标不是目录无法操作';
        return;
    }
    // 创建新文件夹
    if(!file_exists($dirto)) {  // file_exists 存在 ture 不存在false
        mkdir($dirto);
        echo '创建目录' . $dirto . '成功' . "<br/>";
    }
    // 打开源文件
    $resource = opendir($dirsrc);
    // 读取源文件
    while($name = readdir($resource)) {
        // 过滤.与..
        if($name != '.' && $name != '..') {
            // 拼接新路径
            $newDirsrc = $dirsrc . '/' . $name;
            $newDirto = $dirto . '/' . $name;
            if(is_dir($newDirsrc)) {
                //是目录
                copyDir($newDirsrc,$newDirto);
            } else {
                // 是文件
                copy($newDirsrc, $newDirto);
                echo '复制文件' . $newDirsrc . '成功' . '<br/>';
            }
        }
    }
    // 关闭源文件
    closedir($resource);
}
copyDir('./留言板', './测试');
?>
posted @   VarFa  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示