2016-09-21 11 views
0

PHPチェック

$increment = ''; //start with no suffix 
    while(file_exists($_SERVER["DOCUMENT_ROOT"]."/".$file_name . $increment . '.' . $extension)) 
    { 
     $increment++; 
    } 
    $final_name = $file_name . $increment. '.' . $extension; 

私がする必要はありファイルが複数のフォルダに存在し、フォルダの名前が配列に含まれているかどうかを確認します(この配列からフォルダを追加または削除できます)。

$folders[] = "thumb"; 
$folders[] = "medium"; 
$folders[] = "large"; 
$folders[] = "xlarge"; 

これらのすべてのフォルダにファイルが存在するかどうかを確認する必要があります。

ファイルは、私は、ファイルがこれらのフォルダのすべての

に感謝すべてのヘルプは存在しなくなるまで、再びサフィックス チェックを追加する必要があり、このフォルダのいずれかに存在する場合。

+0

ファイルの存在を確認して、その配列で収集されたフォルダ全体を繰り返します。その質問は何ですか? – arkascha

+0

また、「まだ使用されていない」ファイル名を見つけようとすると、ファイル名を生成するのが悪いという印象があります。それはなぜ必要なのですか?一意であることが保証されているファイル名を簡単に作成できないのはなぜですか?チェックするのはまだ理にかなっていますが、その増分戦略は非常に不愉快です。 – arkascha

+0

@arkaschaユーザーがファイルをアップロードしたときに一意になることが保証されているファイル名は作成できません。ファイルがアップロードされたときにファイル名が存在する場合は画像のサイズを変更する必要があります。フォルダは非常にシンプルですが、複数のフォルダを同時にチェックする場合は、もっと複雑で、なぜ質問を投稿したのですか。 – ntan

答えて

1

私が@arkaschaの意見に同意するのは、そのファイルが内部使用のためのものであれば、ユニークなハッシュでファイル名を使うほうが良いということです。

しかし、必要な場合は、 foreach()を使用して、配列内の接頭辞を一度にチェックしてみてください。

function files_suffix_exists($file_name, $folders){ 
    $root = $_SERVER["DOCUMENT_ROOT"]; 
    if(file_exists($root."/".$file_name . '.' . $extension){ 
     return true; 
    } 
    foreach($folders as $folder){ 
     if(file_exists($root."/".$folder."/".$file_name . '.' . $extension){ 
      return true; 
     } 
    } 
    return false; 
} 

$folders[] = "thumb"; 
$folders[] = "medium"; 
$folders[] = "large"; 
$folders[] = "xlarge"; 


$increment = ''; //start with no suffix 
while(files_suffix_exists($file_name, $folders)) 
    $increment++; 
    $file_name .= $increment; 
} 

$final_name = $file_name . '.' . $extension; 
+0

私は内部使用のためにユニークなハッシュが良いことに同意しますが、私は内部のユーザーに直面していません。あなたのソリューションはすばらしく、私は次の時間にそれを試してみるでしょう。ありがとう – ntan

+0

元の名前を維持したい場合は、とにかく内部名とユーザーのカスタム名との関係を維持します。 – HZS

+0

これはSQLクエリを増加させます。私はこれが不要なクエリになると思うし、私はそれぞれのクエリを低く維持するために作る1つをカウントします – ntan

関連する問題