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')); // 整个路径
8.打开---读取---关闭目录
- 打开文件
opendir()
- @parma 文件路径
- 返回值; 由opendir()打开目录成功返回的资源
- 读取目录
readdir()
- **每个目录下都有两个隐藏的目录当前看目录 . 上一级目录 .. **
- @parma: 由opendir()打开目录成功返回的资源
- 返回值: 读取成功返回读到的文件名,读取失败返回或者读取到目录的最后时返回false
- 注意: 第一次读的时候会读到 . (当前目录) 第二次读读到 .. (上一级目录) 而起每次只读一次
- 关闭目录
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('./留言板', './测试');
?>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~