$dir = d:\info\InfoWeb\infoweb\upload/test_content;function makeDir($dir)
{
   if($dir == "")
      return ;
   if(!is_dir($dir) && !is_file($dir) && !file_exists($dir))
   {
      if(preg_match("/^(.+?)\/[^\/]*$/", $dir, $parent))
      {
         self::makeDir($parent[1]);
         if(!is_dir($dir))
          mkdir($dir);
      }
   }
}
这个替换后是什么路径啊?

解决方案 »

  1.   

    preg_match不是  preg_replace 这个才是替换
    代码中意思就是匹配当前路径的父级路径。。如果上级路径不存在,则创建,递归重复这个过程然后判断是否需要,创建指定目录
    =============================is_dir是需要clearstatcache来清理缓存的所以,if(!is_dir($dir))这一句没有存在必要,必然为真。。就算清理了,也是真,否则不能条件进入
    另外,创建目录mkdir ,从5+起,支持一次创建多级目录,具体查手册
      

  2.   

    谢谢,明白多了,就这两句,还是不知道,因为$parent不是要写成$parent[0],$parent[1]这样的吗?[0]匹配全部,[1]匹配第一个模式。所以整个递归过程也没明白?
    if(preg_match("/^(.+?)\/[^\/]*$/", $dir, $parent))   //那这个是不是匹配全部的写法
    {
      self::makeDir($parent[1]);                       //然后把d:\info\部分创建
    }
      

  3.   

     self::makeDir($parent[1]); //这个始终是[1]怎么递归呢?
      

  4.   

    这个静态方法本意是,每次获取$dir的上级目录,如果不存在,则获取上级的上级目录……然后逐级创建目录递归函数,代码当然一样,但是每次调用参数是不一样的,能达到条件终止递归,你可以自己echo输出信息
    就本函数来说,正则是有问题的,,必须要求目录分隔符为\,并且目录最后不能带\
      

  5.   

    lz应该先理解一下什么叫递归。另外,mkdir()第三个参数可以指明递归建目录
    mkdir('/1/1/1/2/3',0644,true);可以递归建立不存在的父目录。所以你的递归不是必须的,也是低效的。