Heim  >  Artikel  >  Backend-Entwicklung  >  php递归创建和删除文件夹的代码小结_php技巧

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

WBOY
WBOYOriginal
2016-05-17 09:11:41983Durchsuche

第一种方法:

复制代码 代码如下:

/**
* 目录生成类 :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,就行
复制代码 代码如下:

deltree('./复件 复件 复件 复件 复件 复件 复件 复件 aaa');
function deltree($pathdir)
{
//echo $pathdir.'
';//我调试时用的
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,就行,没测
复制代码 代码如下:

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 '
';
$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下测试成功,是列出目录文件 很好用
复制代码 代码如下:

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 "目录名:".$dir."/".$file."

";
$i++;
listDir($dir."/".$file);
$i--;
}
else
{
if($file!="." && $file!="..")
{
$j=$i;while($j--) echo "-------";
$ext=trim(extend($file));
//if($ext=='jpg')
echo $dir.'/'.$file."
";
}
}
}
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(".");
?>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn