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 相关文章推荐
ftp类(myftp.php)
Oct 09 PHP
网络资源
Oct 09 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 PHP
PHP遍历XML文档所有节点的方法
Mar 12 PHP
试用php中oci8扩展
Jun 18 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
PHP实现对数组分页处理实例详解
Feb 07 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
php 截取中英文混合字符串的方法
May 31 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
php对象工厂类完整示例
Aug 09 PHP
vmware linux系统安装最新的php7图解
Apr 14 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
世界咖啡生产者论坛呼吁:需要立即就咖啡价格采取认真行动
2021/03/06 咖啡文化
浅析SVN常见问题及解决方法
2013/06/21 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
numpy中的高维数组转置实例
2018/04/17 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
基于Python中的yield表达式介绍
2019/11/19 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
python 常见的反爬虫策略
2020/09/27 Python
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
文秘人员工作职责
2014/01/31 职场文书
开学典礼感言
2014/02/16 职场文书
死亡赔偿协议书
2015/01/28 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
JavaScript前端面试组合函数
2022/06/21 Javascript