2016-09-21 1 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-запрос. Я думаю, что это будет ненужный запрос, и я подсчитаю каждый из них, который я делаю, чтобы поддерживать низкие запросы. – ntan

 Смежные вопросы

  • Нет связанных вопросов^_^