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 相关文章推荐
php的一些小问题
Jul 03 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
PHP Class&amp;Object -- 解析PHP实现二叉树
Jun 25 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
php实现文件与16进制相互转换的方法示例
Feb 16 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
PHP实现权限管理功能示例
Sep 22 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 PHP
PHP设计模式之组合模式定义与应用示例
Feb 01 PHP
php优化查询foreach代码实例讲解
Mar 24 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
PHP面向对象编程快速入门
2006/12/14 PHP
php中的登陆login
2007/01/18 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
JS跨域总结
2012/08/30 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
jquery京东商城双11焦点图多图广告特效代码分享
2015/09/06 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
python实现外卖信息管理系统
2018/01/11 Python
python 用下标截取字符串的实例
2018/12/25 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
pytorch进行上采样的种类实例
2020/02/18 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
pytorch中index_select()的用法详解
2021/01/06 Python
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
顺丰快递Java软件工程师面试题
2015/07/31 面试题
思想品德自我鉴定
2013/10/12 职场文书
毕业生找工作推荐信
2013/11/21 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
安全员岗位职责范本
2015/04/11 职场文书
歌咏比赛主持词
2015/06/29 职场文书
《分数乘法》教学反思
2016/02/24 职场文书