0
/** 
 * Makes directories if they do not exist
 * 
 * @param array $dirs array of directories
 * @return bool if TRUE and error array if FALSE
 *
 */
function mkdir_if_not_exist($dirs) {
    $err = array();
    if (is_array($dirs)) {
        foreach ($dirs as $dir) {
            if (!is_dir($dir)) {
                if (!mkdir($dir)) {
                    $err[] = "Directory {$dir} could not be created.";
                }
            }
        }
        if (count($err) > 1) {
            $err = implode('<br>', $err);
            count($err) > 2 ? $err .= 'Check if you have permission to make folders on the server' : '';
            $err = explode($err);           
        }
    } else {
        trigger_error('Array is required for function ' . __FUNCTION__, E_USER_ERROR);
    }
    if (!empty($err)) {
        // return errory array
        return $err;
    } else {
        return TRUE;
    }
}

这是我编写的一个简单函数,用于获取目录数组并检查它们是否存在,如果不存在则创建它们,如果在创建它们时出现问题,则添加错误。如果有多个目录“无法创建”,我希望能够在值之间添加换行符,如果有超过 2 个错误,我想添加一条附加消息。并将其重新包装为数组。我不断收到错误,我不确定我做错了什么。

我计划以下列方式访问它:

$dir = array('this', 'that');
$out = mkdir_if_not_exist($dir);
if (is_bool($out)) {
  echo 'success'
} else {
  // output array
  echo implode('', $out);
}

更新:

    if (count($err) > 1) {
        $err = implode('<br>', $err);
        $err = explode('<br>', $err);
        $err = array_push($err, 'Check if you have permission to make folders on the server');
    }
4

2 回答 2

0

为什么不使用mkdir(dirname, premissons, recursive)

抱歉,我误解了-您的explode()缺少参数。

删除 mkdir_...() 中的内爆和爆炸,并在 echo 上内爆数组

if (count($err) > 2)
    $err[] = 'Check if you have permission to make folders on the server';
于 2013-08-05T00:00:01.797 回答
-1

我马上看到的一个问题是,count($err) > 2 ?由于 implode() 函数,您刚刚为 $err 分配了一个字符串值,因此您正在执行此操作。如果您打算计算是否有超过 2 个错误,那不是您得到的。字符串上的 count() 将始终返回 1。

我真的不明白为什么你想把 $err 内爆成一个字符串,然后转身把它分解成一个数组。如果函数的目的是在出现问题时返回一个错误数组,那么调用代码的作用应该是决定如何格式化生成的错误数组以显示给用户,而不是试图强制格式化到功能本身。

但是,如果您确实希望在数据中使用 html 格式,我想
在创建错误时将标签添加到错误的末尾会更容易:

$err[] = "Directory {$dir} could not be created.<br />";

然后,而不是做if (count($err) > 1) {,只是做:

if (count($err) > 2) {
  $err[] = 'Check if you have permission to make folders on the server';          
}
于 2013-08-05T00:21:25.590 回答