/** - * 目录生成类 :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(".");
- ?>
|