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 相关文章推荐
多文件上传的例子
Oct 09 PHP
PHP新手上路(八)
Oct 09 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
php下载远程文件类(支持断点续传)
Nov 14 PHP
PHP中include与require使用方法区别详解
Oct 19 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
php数组操作之键名比较与差集、交集赋值的方法
Nov 10 PHP
php微信支付之APP支付方法
Mar 04 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
Oct 07 PHP
php实现数组重复数字统计实例
Sep 30 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
phpcms手机内容页面添加上一篇和下一篇
2015/06/05 PHP
代码生成器 document.write()
2007/04/15 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
bpython 功能强大的Python shell
2016/02/16 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
应聘教师自荐信
2013/10/12 职场文书
医院护士的求职信范文
2013/12/26 职场文书
化学系大学生自荐信范文
2014/03/01 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
社区居务公开实施方案
2014/03/27 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
前台接待岗位职责
2015/02/03 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电