会员登陆
帐号:

密码:

记住我



忘记密码?

现在注册!
网站导航
php4 中的mkdir()递归目录
28 次阅读
Tag: php  

以前一直用一个函数去迭代创建目录单是这个只支持php5,因为php5才支持mkdir()的递归参数.

php5的方法:

function CreateDir($dir){

    if ( !is_dir($dir) ) {

        if ( !@mkdir($dir, 0777, true) ){

            return false ;

        } else {

            @chmod($dir, 0777);

        }

    }

    return $dir;

}

最近在做一个项目的时候,客户的服务器是php4.x的,这个方法肯定不好用,于是乎就到php的官方手册中寻宝. 发现了程度不同的几个写法,看代码: 好笨的方法:

 

<?php

function recursive_mkdir($path, $mode = 0777) {
    $dirs = explode(DIRECTORY_SEPARATOR , $path);
    $count = count($dirs);
    $path = '.';

    for ($i = 0; $i < $count; ++$i) {
        $path .= DIRECTORY_SEPARATOR . $dirs[$i];
        if (!is_dir($path) && !mkdir($path, $mode)) {
            return false;
        }
    }
    return true;
}

?>

优化了一下的代码:

<?php

function mkdir_r($dirName, $rights=0777){
    $dirs = explode('/', $dirName);
    $dir='';
    foreach ($dirs as $part) {
        $dir.=$part.'/';
        if (!is_dir($dir) && strlen($dir)>0)
            mkdir($dir, $rights);
    }
}

?>

最牛逼的写法,直接写了个递归函数:

function mkdirs($dir, $mode = 0777, $recursive = true) {
  if( is_null($dir) || $dir === "" ){
    return FALSE;
  }
  if( is_dir($dir) || $dir === "/" ){
    return TRUE;
  }
  if( mkdirs(dirname($dir), $mode, $recursive) ){
    return mkdir($dir, $mode);
  }
  return FALSE;
}