当前位置:编程学习 > php >>

php循环创建目录的函数代码

 php创建目录功能

/**
 * 创建目录
 * @param string $path 目录路径
 * @return boolean|string
 */ 
function makeDir($path) { 
    $path = str_replace(array('/', '\\', '//', '\\\\'), DIRECTORY_SEPARATOR, $path); 
    $dirs = explode(DIRECTORY_SEPARATOR, $path); 
    $tmp = ''; 
    foreach ($dirs as $dir) { 
        $tmp .= $dir . DIRECTORY_SEPARATOR; 
        if (!file_exists($tmp) && !mkdir($tmp, 0777)) { 
            return $tmp; 
        } 
    } 
    return true; 

以上程序绝大多数没有问题,但是在部分安全要求严格的服务器上,就会产生问题。
例如,假设需要创建 D:\server\www\temp 目录,如果网站没有D盘的读取权限,则file_exists就会返回false,于是程序尝试去创建D盘目录,显然这不是我们期望的。我建议的做法,就是替换掉网站根路径,不管传进来的参数有没包含根路径,在判断目录是否存在和创建目录时再加上网站根路径。

改良后的代码:

function makeDir($path) { 
    $path = str_replace(array('/', '\\', '//', '\\\\'), DIRECTORY_SEPARATOR, $path); 
    $path = str_replace(ROOT_PATH, '', $path); //替换网站根路径, ROOT_PATH 通常可以在配置文件里定义 
    $dirs = explode(DIRECTORY_SEPARATOR, $path); 
    $relativePath = ''; 
    foreach ($dirs as $dir) { 
        if ($dir) { 
            $relativePath .= $dir . DIRECTORY_SEPARATOR; 
            $realPath = ROOT_PATH . $relativePath; 
            if (!file_exists($realPath) && !@mkdir($realPath, 0777)) { 
                return $realPath; 
            } 
        } 
    } 
    return true; 

ROOT_PATH 定义:
[php] view plaincopy
define('ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR); 

调用:

makeDir('upload/2012/11/12');//或者 makeDir(ROOT_PATH . 'upload/2012/11/12');

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,