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

-1

すぐにわかる問題の 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 に答える