2016-12-06 10 views
0

Мои пользователи могут загружать фотографии профиля один за другим, но так часто, как они хотят.auto increment number in filename

Давайте предположим, что пользователь 1 загружает изображение, этот код будет хранить его в мои добавления папка:

<?php 

$fileData = pathinfo(basename($_FILES["fileToUpload"]["name"])); 

$fileName = 'user_id_#1#_profilepic_#' . uniqid() . '#.' . $fileData['extension']; 

$target_path = "uploads/" . $fileName; 

while(file_exists($target_path)) { 
    $fileName = 'user_id_#1#_profilepic_#' . uniqid() . '#.' . $fileData['extension']; 
    $target_path = ($_SERVER['DOCUMENT_ROOT'] . "uploads/" . $fileName); 
} 

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_path)) { 

    echo "The image was successfully uploaded. <a href='index.php'>Add another image</a>"; 
} 
else { 
    echo "There was an error uploading the file, please try again!"; 
} 

?> 

Это uniqid() должен быть заменен, потому что это кошмар, чтобы найти изображения позже в правильный порядок.

Я хочу изображения - после загрузки - выглядеть следующим образом:

user_id_#1#_profilepic_#1#.jpg 
user_id_#1#_profilepic_#2#.jpg 
user_id_#1#_profilepic_#3#.png 
user_id_#1#_profilepic_#4#.gif 
user_id_#1#_profilepic_#5#.jpg 
and so on... 

Как я могу это сделать? Пока у меня нет никаких идей.

+0

Почему бы не использовать что-то вроде метки времени? '$ fileName = 'user_id_ # 1 # _profilepic_ #'. время(). '#'. , $ fileData ['extension']; ' – AbraCadaver

+0

, потому что я не знал об этой опции в первую очередь, но теперь мне интересно, как я мог бы прочитать это имя, когда я хочу отображать разные картинки? Если у меня есть номер автоинкремента в моем имени файла, я могу только начать с самых высоких чисел и перейти к более низким номерам при нажатии. Но если есть время, связанное с именем файла, это не сработает, верно? – Maxischl

+1

'$ users_files = glob ('user_id_ # 1 # _profilepic _ # *. *');' – AbraCadaver

ответ

0

Вы можете увеличить на номер файла в каталоге (не рекомендуется, если ваш пользователь может удалить свои фотографии):

$total_files = count(glob("./*",GLOB_BRACE)); // count files in directory 
echo $total_files; 

ИЛИ:

использовать текстовый файл, в котором записать номер.

Для Exemple: Вы пользователь загрузить файл: Получить текущее число в текстовом файле -> добавить +1 и переименовать файл с этим номером -> записать новый номер в текстовом файле.

Лучший способ - это уникальный идентификатор из записи базы данных, но вы, возможно, не используете БД.

Я надеюсь, что вам это поможет.

Имейте славный день!

+0

спасибо, я подумал об этом, но вы уже упоминали об этом: если пользователь удаляет файл, система будет уничтожена при следующей загрузке. Вот почему я не могу его использовать. Я читал о тексте-вещи раньше сегодня, но это означает, что мне нужно создать для каждого пользователя и каждого типа изображения (изображение профиля, изображение в блоге, сообщения и т. Д.) Новый файл, правильно? это тоже не самый умный способ. – Maxischl

+0

Возможно, вы можете использовать систему count (glob (...) и проверить, используется ли это имя с помощью функции scandir(). – x2aces

+0

Извините за мой предыдущий комментарий, это мой первый раз в stackoverflow, и я еще не знаю, как для использования форматирования текста ^^ – x2aces