$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);
}
}
}
这个替换后是什么路径啊?
{
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);
}
}
}
这个替换后是什么路径啊?
代码中意思就是匹配当前路径的父级路径。。如果上级路径不存在,则创建,递归重复这个过程然后判断是否需要,创建指定目录
=============================is_dir是需要clearstatcache来清理缓存的所以,if(!is_dir($dir))这一句没有存在必要,必然为真。。就算清理了,也是真,否则不能条件进入
另外,创建目录mkdir ,从5+起,支持一次创建多级目录,具体查手册
if(preg_match("/^(.+?)\/[^\/]*$/", $dir, $parent)) //那这个是不是匹配全部的写法
{
self::makeDir($parent[1]); //然后把d:\info\部分创建
}
就本函数来说,正则是有问题的,,必须要求目录分隔符为\,并且目录最后不能带\
mkdir('/1/1/1/2/3',0644,true);可以递归建立不存在的父目录。所以你的递归不是必须的,也是低效的。