2012-02-06 2 views
0

file_exists関数を使用してフォルダが存在するかどうかを確認しています。PHP Mkdirフォルダが存在しない場合は、それが続行されますが、毎回名前に増分値を追加します。

もしそうでなければ、私は一連のフォルダを作成しています。

もし存在すれば、フォルダの作成を続けたいが、トップフォルダは毎回id#1、#2、#3などをインクリメントする必要がある。

if (file_exists('temp/$email')) { 
    mkdir("temp/$email/"); 
    mkdir("temp/$email/css"); 
    mkdir("temp/$email/js"); 
    mkdir("temp/$email/images"); 

} else { 

    $version = 0; 
    $version++; 

    mkdir("temp/$email$version/"); 
    mkdir("temp/$email$version/css"); 
    mkdir("temp/$email$version/js"); 
    mkdir("temp/$email$version/images"); 
} 

これの行に沿って何かが動作しないことは明らかです。これをやり遂げるにはどうすればいいですか?

また、私がやったやり方のように、長いリストに書き込むのではなく、複数のmkdirを実行するクリーナー/シンプルな方法がありますか?

答えて

1

ここでは、少し効率的な解決法があります。mkdirの大きなリストなしでサブディレクトリを作成することもできます。

a/deeper/sub/directoryのようなサブディレクトリを定義すると、完全なパスが作成されます。

コードを機能させるためにいくつかのデフォルト値は:

define('BASE_DIR', 'temp/'); 

$email = 'hello'; 

$subdirs = array(
    'css', 
    'js', 
    'images' 
); 

改善されたループ:

$version = ''; 

if (file_exists(BASE_DIR . $email)) { 
    $version = 0; 
    while (file_exists(BASE_DIR . $email . (++$version))); 
} 

あなたのサブディレクトリを作成します。

foreach ($subdirs as $dir) { 
    mkdir(BASE_DIR . $email . $version . '/' . $dir, 0777, true); 
} 
1
if (file_exists('temp/'.$email)) { 
    $version = 1; 
    while (file_exists('temp/'.$email.$version)) { 
     $version ++; 
    } 
} else { 
    $version = ""; 
} 
mkdir("temp/".$email.$version."/"); 
// etc 

無限ループが発生しないように、健全性のチェックも必要です。

+0

美しいです。私はこれをちょっと試してみると、戻って来て答えを与える:)感謝! – tctc91

+0

最新の編集版を入手してください。古いものは、私が言及した無限ループの無限ループです。 –

関連する問題