php递归创建和删除文件夹的代码小结


Posted in PHP onApril 13, 2012

第一种方法:

<?php 
/** 
* 目录生成类 :UtilsMakeDir 
* @author yepeng 
* @since 2010.3.18 
*/ 
class UtilsMakeDir{ 
//基目录 建立目录时不会对这个目录进行建立。这应该是个已经存在的目录 
private static $makeBasePath = 'video'; 
private static $delBasePath = 'video'; /** 
* 递归建立目录, 
* 建立成功返回这个全路径, 
* 建立失败返回false 
* @param String $pathString 路径字符串如'2/3/4/5' 
* @return false or string 
public static function makeDir($pathString){ 
$pathArray = explode('/',$pathString); 
if(empty($pathArray[0])){ 
return false; 
} 
$path = array_shift($pathArray); 
self::$basePath = self::$basePath.'/'.$path; 
if(is_dir(self::$basePath)){ 
$path = implode('/',$pathArray); 
self::makeDir($path); 
} 
else{ 
@mkdir(self::$basePath,0777); 
$path = implode('/',$pathArray); 
self::makeDir($path); 
} 
if(is_dir(self::$basePath)){ 
return self::$basePath; 
} 
else{ 
return false; 
} 
} */ 
/** 
* 建立目录,包括基目录,比如图片要放在video(video为存在的目录)下面,你传入的参数应该是video/2/3/4 
* 建立成功返回这个全路径, 
* 建立失败返回false 
* @param String $pathString 路径字符串如'video/2/3/4/5' 
* @return false or string 
**/ 
public static function makeDir($pathString){ 
$pathArray = explode('/',$pathString); 
$tmpPath = array_shift($pathArray); 
foreach ($pathArray as $val){ 
$tmpPath .= "/".$val; 
if(is_dir($tmpPath)){ 
continue; 
} 
else { 
@mkdir($tmpPath,0777); 
} 
} 
if(is_dir($tmpPath)){ 
return $tmpPath; 
} 
else{ 
return false; 
} 
} /** 
* 递归删除 
* 删除目录及文件 
* 如果传一个‘video/2/3/4'这样的路径将删除4下的所有目录和文件 
* @param string $stringPath 
*/ 
public static function delDir($stringPath){ 
if(!$handle = @opendir($stringPath)){ 
return false; 
} 
while (false !==($file = readdir($handle))){ 
if($file !='.' && $file != '..'){ 
$tmpdir = $stringPath."/".$file; 
if(is_dir($tmpdir)){ 
self::delDir($tmpdir); 
rmdir($tmpdir); 
} 
if(is_file($tmpdir)){ 
unlink($tmpdir); 
} 
} 
} 
closedir($handle); 
}} 
?>

循环+递归,在winxp下测试成功,只要php文件编码为gb2312,文件名随意,应该把文件名改为编码为gb2312,就行
<?php 
deltree('./复件 复件 复件 复件 复件 复件 复件 复件 aaa'); 
function deltree($pathdir) 
{ 
//echo $pathdir.'<br/>';//我调试时用的 
if(is_empty_dir($pathdir))//如果是空的 
{ 
rmdir($pathdir);//直接删除 
} 
else 
{//否则读这个目录,除了.和..外 
$d=dir($pathdir); 
while($a=$d->read()) //下只删除$pathdir下 
{ 
if(is_file($pathdir.'/'.$a) && ($a!='.') && ($a!='..')) 
{ 
unlink($pathdir.'/'.$a); //如果是文件就直接删除 
}elseif(is_dir($pathdir.'/'.$a) && ($a!='.') && ($a!='..')) //如果是目录 
{ 
if(!is_empty_dir($pathdir.'/'.$a))//是否为空 
{ 
deltree($pathdir.'/'.$a); //如果不是,调用自身 
}else 
{ 
rmdir($pathdir.'/'.$a); //如果是空就直接删除 
} 
} 
} 
$d->close(); 
//echo "必须先删除目录下的所有文件";//我调试时用的 
rmdir($pathdir); 
} 
} 
function is_empty_dir($pathdir) 
{ 
//判断目录是否为空,我的方法不是很好吧?除了.和..之外有其他东西不是为空 
$d=opendir($pathdir); 
$i=0; 
while($a=readdir($d)) 
{ 
$i++; 
} 
closedir($d); 
if($i>2){return false;} 
else return true; 
} 
?>

第二种递归法 在winxp下测试成功,只要php文件编码为gb2312,文件名随意,应该把文件名改为编码为gb2312,就行,没测
<?php 
header("Content-Type:text/html; charset=gb2312"); 
if(deleteDir('./复件 复件 复件 复件 复件 复件 复件 复件 复件 复件 复件 aaa')) 
echo "删除成功"; 
function deleteDir($dir) 
{ 
if (@rmdir($dir)==false && is_dir($dir)) //删除不了,进入删除所有文件 
{ 
if ($dp = opendir($dir)) 
{ 
while (($file=readdir($dp)) != false) 
{ 
if($file!='.' && $file!='..') 
{ //echo $file=$dir.'/'.$file;echo '<br/>'; 
$file=$dir.'/'.$file; 
if (is_dir($file)) //是真实目录 
{ 
deleteDir($file); 
}else { 
unlink($file); 
} 
} 
} 
closedir($dp); 
}else 
{ 
return false; 
} 
} 
if (is_dir($dir) && @rmdir($dir)==false) //是目录删除不了 
return false; 
return true; 
} 
?>

第三种递归法 在winxp下测试成功,是列出目录文件 很好用
<?php 
function listDir($dir) 
{ 
static $break=0; if($break++==100) exit;//控制深入层数 
static $i=-0; 
if(is_dir($dir))//目录 
{ 
if ($dh = opendir($dir))//打开 
{ 
while (($file = readdir($dh)) !== false) 
{ 
if((is_dir($dir."/".$file)) && $file!="." && $file!="..")//目录 
{ 
$j=$i;while($j--) echo "-------"; 
echo "<b><font color='red'>目录名:</font></b>".$dir."/".$file."<br><hr>"; 
$i++; 
listDir($dir."/".$file); 
$i--; 
} 
else 
{ 
if($file!="." && $file!="..") 
{ 
$j=$i;while($j--) echo "-------"; 
$ext=trim(extend($file)); 
//if($ext=='jpg') 
echo $dir.'/'.$file."<br>"; 
} 
} 
} 
closedir($dh); 
} 
} 
} 
function extend($file_name) 
{ 
$retval=""; 
$pt=strrpos($file_name, "."); 
if ($pt) $retval=substr($file_name, $pt+1, strlen($file_name) - $pt); 
return ($retval); 
} 
//开始运行 
listDir("."); 
?>
PHP 相关文章推荐
PHP6 先修班 JSON实例代码
Aug 23 PHP
PHP XML操作类DOMDocument
Dec 16 PHP
对象失去焦点时自己动提交数据的实现代码
Nov 06 PHP
通过curl模拟post和get方式提交的表单类
Apr 23 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
php实现paypal 授权登录
May 28 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 PHP
redis 队列操作的例子(php)
Apr 12 #PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 #PHP
比较好用的PHP防注入漏洞过滤函数代码
Apr 11 #PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
Apr 09 #PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 #PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 #PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 #PHP
You might like
神族 PROTOSS 概述
2020/03/14 星际争霸
php生成WAP页面
2006/10/09 PHP
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
php字符集转换
2017/01/23 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
禁止你的左键复制实用技巧
2013/01/04 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
Vue3.x源码调试的实现方法
2019/10/13 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
Python 自动化表单提交实例代码
2017/06/08 Python
在python中pandas的series合并方法
2018/11/12 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
惠普香港官方商店:HP香港
2019/04/30 全球购物
幼儿园2015年度工作总结
2015/04/01 职场文书
小学六一主持词开场白
2015/05/28 职场文书
田径运动会通讯稿
2015/07/18 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技