PHP Mkdirもしフォルダーが存在しない場合は、それが続行されますが、そのたびに名前にインクリメント値を追加してください

file_exists関数を使用してフォルダが存在するかどうか確認しています。

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

それが存在する場合は、フォルダの作成を続行したいが、一番上のフォルダは毎回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をやっているクリーナー/シンプルな方法がありますか?

0

2 答え

ここでは少し効率的な解決法がありますが、 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

無限ループを起こさないように、そこにサニティチェックを置くべきです。

1
追加された
美しい。私はこれをちょっと試してみると、戻って来て答えを与える:)感謝!
追加された 著者 tctc91,
最新の編集版を確実に入手してください - 古いものは私が言及した無限ループです。
追加された 著者 Grim...,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com