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;
}
