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.如果是目录就 ...
随机推荐
- js 中闭包的概念
- linux grep -I 属性
忽略大小写的查找: grep -i 'address' test.log --> address ADDRESS
- Vue 过滤器与计算属性
过滤器 V1.x 版本 过滤器基础 过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数.Vue有很多很便利的过滤器,可以参考官方文档,http://cn.vuejs.org/ ...
- php emoji处理微信表情
使用 https://github.com/iamcal/php-emoji 添加下面的函数到代码中 function utf8_bytes($cp){ if ($cp > 0x10000){ ...
- 如何在在WinFrom的DataGridView中做到数据持续动态加载而不卡死
1.在这个过程我用过好几种办法 (1)使用委托的办法,这个方法可以做到持续加载,但是效果不理想会卡死 (2)开启线程的方法,会造成卡死 (3)使用另一个窗体的线程做持续加载(子窗体),让子窗体作为一个 ...
- 个人理解的javascript作用域链与闭包
闭包引入的前提个人理解是为从外部读取局部变量,正常情况下,这是办不到的.简单的闭包举例如下: function f1(){ n=100; function f2(){ alert(n); } retu ...
- svn安装与其服务器搭建
1.概述:SVN为程序开发团队常用的代码管理,版本控制软件. 2.工具: 1) TortoiseSVN-1.8.4.24972-win32-svn-1.8.5.msi SVN安装包. 2)setup ...
- DEV设计之自动流水号,DEV专家解答,自己折腾了半天也没有搞定,怪英文不好
() 老外专家给了回答,结果没有全到懂,又折腾了20分钟朋友提示才搞定 获取一个自动增加1的流水号值, 第一个参数是本事的数据库连接对象,第2个参数是也这个值为唯一标识返回来一个增量的值,第三个好像没 ...
- 图解VMware内存机制
在写<VMware内存机制初探>之后,原本是计划写一篇<VMware内存机制再探>的,讲一讲VMware内存机制中的另外几个重要内容,比如透明内存共享(TPS, Transpa ...
- Faster-RCNN 解析
http://blog.csdn.net/xzzppp/article/details/52317863 包含faster-rcnn源码和对应的训练测试相关的知识点解析