Счетчик в имени файла

Итак, проблема в том, что всякий раз, когда пользователь загружает файл, проверяется, существует ли файл в каталоге. Если существует, в имени файла следует указать суффикс _n, где n — это число. Таким образом, при второй загрузке имя файла должно выглядеть как file_2.extension. Должно ли это быть сделано с помощью какого-то цикла?

if ($request->hasFile('file')) {
$file = $request->file('file');
$user = Auth::id();
$filename = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$onlyname = basename($filename, $extension);
$filePath = 'uploads\\'.$user.'\\'.$file->getClientOriginalName();
if (file_exists($filePath)) {
if($file->move('uploads\\'.$user, $onlyname.'_'.$counter.'.'.$extension)){
$uploadHandler = new UploadHandler();
$uploadAttributes = $uploadHandler->uploadAttributes($request);
}
}
}

0

Решение

Да тебе нужна while петля

if ($request->hasFile('file')) {
$file = $request->file('file');
$user = Auth::id();
$filename = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$onlyname = basename($filename, $extension);
$filePath = 'uploads\\'.$user.'\\'.$file->getClientOriginalName();

if (file_exists($filePath)) {
$counter = 2;
while (file_exists($filePath)){
$filePath = 'uploads\\'.$user. $onlyname.'_'.$counter.'.'.$extension;
$counter ++;
}
}
if($file->move($filePath)){
$uploadHandler = new UploadHandler();
$uploadAttributes = $uploadHandler->uploadAttributes($request);
}
}
2

Другие решения

Да, вы можете использовать цикл while, например так:

while( file_exists($filePath) ) {
// increment your $counter and update $filePath accordingly
}
1

По вопросам рекламы [email protected]