PHP-递归扫描目录和删除目录
(1) 通过递归扫描目录并打印
// php递归扫描目录
function scanMyDir($path){
// 打开目录
$dh = opendir($path);
echo '<ul>';
// 循环读取目录
while(($file = readdir($dh)) !== false){
// 先要过滤掉当前目录'.'和上一级目录'..'
if($file == '.' || $file == '..') continue;
// 为了能够显示中文目录/文件,需要进行转码
echo '<li>'.iconv('gbk','utf-8',$file).'</li>';
// 如果该文件仍然是一个目录,进入递归
if(is_dir($path.'/'.$file)){
scanMyDir($path.'/'.$file);
}
}
echo '</ul>';
}
$path = 'e:/Music';
scanMyDir($path);
需要注意的地方:
①在读取目录的时候,会读取.和..,分别表示当前目录和上一级目录,需要过滤掉它们以进行后续的打印和操作。
②中文操作系统默认的编码是gbk,因此目录与文件的编码为gbk。想要在网页上显示的时候没有乱码,需要通过iconv函数进行转码。
③这一份代码是用无序列表来显示目录结构的。还有一种办法:可以添加一个递归深度$deep作为函数的参数,默认为0,每一次递归加1。这样不同的层级就拥有了不同的递归深度,通过str_repeat()函数来利用递归深度,就能让目录结构分出层次了。
(2) 通过递归删除目录及目录下的文件
// php递归删除目录和文件
function delAll($path){
// 打开目录
$dh = opendir($path);
// 循环读取目录
while(($file = readdir($dh)) !== false){
// 过滤掉当前目录'.'和上一级目录'..'
if($file == '.' || $file == '..') continue;
// 如果该文件是一个目录,则进入递归
if(is_dir($path.'/'.$file)){
delAll($path.'/'.$file);
} else {
// 如果不是一个目录,则将其删除
unlink($path.'/'.$file);
}
}
// 退出循环后(此时已经删除所有了文件),关闭目录并删除
closedir($dh);
rmdir($path);
}
$path = './test';
delAll($path);
需要注意的一点是:只有当这个目录不是工作状态的时候,才能进行删除。所以必须要先通过closedir()关闭目录,并且确保在计算机中也退出了该目录,再进行删除的操作。
PHP-递归扫描目录和删除目录的更多相关文章
- 递归拷贝目录与删除目录 WindowsAPI C++
/*判断一个路径是否是已存在的目录*/ bool IsDirectory(const std::wstring& pstrPath) { DWORD dw = GetFileAttribute ...
- (实用篇)PHP不用递归遍历目录下所有文件的代码
<?php /** * PHP 非递归实现查询该目录下所有文件 * @param unknown $dir * @return multitype:|multitype:string */ fu ...
- php递归操作目录 递归对参数转义
header("Content-type:text/html;charset=utf-8"); //递归读取目录 function reddir($path,$level=0) { ...
- Duilib实现类似电脑管家扫描目录效果
实现原理: 1.后台开线程遍历目录,遍历出一个文件路径在界面上更新显示(通过发消息通知主界面) 2.需要扩展一下Duilib控件,在此我扩展了CLabelUI,重写了PaintText函数 扩展控件的 ...
- Java递归列出目录下全部文件
Java递归列出目录下全部文件 /** * 列出指定目录的全部内容 * */ import java.io.*; class hello{ public static void main(String ...
- Linux下文件及目录的一些操作(附递归遍历目录源码)
1.获取当前工作目录 #include <unistd.h> 1.char *getcwd(char *buf,size_t size); 2. 3.其中,buf为缓冲区地址,size为给 ...
- Erlang递归列举目录下文件
Erlang递归列举目录下文件(金庆的专栏)%%%-------------------------------------------------------------------%%% @aut ...
- Java 之递归遍历目录
Java 之递归遍历目录 一.内容 输出指定目录(文件夹)下的所有文件(包括目录)的绝对路径 二.源代码:RecursiveListDirectory.java package cn.com.zfc. ...
- Java中递归的优缺点,Java写一个递归遍历目录下面的所有文件包括子文件夹里边的文件。
题目: 遍历出aaa文件夹下的文件 首先分析思路: 1.首先判断这个文件夹是否为文件,通过isFile()函数可以判断是否为文件. 2.然后通过isDirectory判断是否为目录. 3.如果是目录就 ...
随机推荐
- MYBATIS 文档
http://www.mybatis.org/mybatis-3/zh/index.html
- C语言解析Ini格式文件
引用别人的博文: http://www.open-open.com/lib/view/open1402278076447.html 可以解析 INI 格式的字符串.解析文件.保存到文件. 下面是头文件 ...
- 冷门JS技巧
前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...
- Android的setVisibility(View.GONE)无效的问题及原因分析
出现这种情况很可能是因为设置了animation,并且调用了setFillAfter(true),这就会导致setVisibility无效,只需要调用一下clearAnimation()方法或者去掉s ...
- java_jdk_JDK版本切换批处理脚本
我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下图所示:
- jQuery的开始
一.下载 jQuery http://jquery.com/download/ 二.什么是jQuery: 1.jQuery 是一个 JavaScript 库. 2.jQuery 极大地简化了 Java ...
- june 14
Thank you for your applying for employment with our company. Your application is now being processed ...
- Java 验证码、二维码
Java 验证码.二维码 资源 需要: jelly-core-1.7.0.GA.jar网站: http://lychie.github.io/products.html将下载下来的 jelly ...
- 安装memcache扩展
今天早上去公司打开新项目,结果提示"Class 'Memcache' not found",于是上网搜了下这是怎么回事?现在在这里记录一下解决过程,以备查询,也希望能帮助到遇到相同 ...
- 证书过期-->app审核提示90034证书错误
1.证书过期问题,去钥匙串中删除过期证书,然后新下载一个证书,重新添加,注:一定要把所有过期证书全部删除,如果不显示则点击钥匙串-->显示过期证书 然后下载新证书:https://develop ...