Структура папки с пользовательским содержимым, основанная на идентификаторе пользователя и скрывающая всех пользователей
Я пытаюсь выяснить структуру папок для хранения пользовательского контента, такого как изображения, который будет работать для огромного количества пользователей. Я собирался пойти с чем-то вроде... 000/000/001 (идентификатор пользователя 1) ....999 макс подпапки на папку.
Но я хотел бы скрыть общее количество пользователей, которое легко увидеть, начиная с 1. Должен ли я начинать с некоторого случайного числа, например 349203480? Я озадачен тем, как работать с папками на основе идентификатора таким образом. Есть ли какой-нибудь лучший / более простой способ?
2 ответа
Используйте GUID:
Согласно руководству по PHP:
<?php
/* A uniqid, like: 4b3403665fea6 */
printf("uniqid(): %s\r\n", uniqid());
/* We can also prefix the uniqid, this the same as
* doing:
*
* $uniqid = $prefix . uniqid();
* $uniqid = uniqid($prefix);
*/
printf("uniqid('php_'): %s\r\n", uniqid('php_'));
/* We can also activate the more_entropy parameter, which is
* required on some systems, like Cygwin. This makes uniqid()
* produce a value like: 4b340550242239.64159797
*/
printf("uniqid('', true): %s\r\n", uniqid('', true));
?>
Создавайте уникальные папки, создавайте уникальные подпапки. Никто, включая вас самих, никогда не узнает, сколько у вас есть... если только вы не выполняете подсчет папок / подпапок в файловой системе или не ведете ссылку реальных пользователей на GUID
Ну, самый простой и легкий подход - это то, что вы предложили. Предварительно начните считать пользователей со случайным числом.
Другим способом было бы добавить случайное число к вашему идентификатору пользователя.
$userid = get_user_id();
$foldername = strval($userid) . strval(rand(1, 999));
//$foldername = 11, 231, ...
Но, конечно, вышеописанный метод требует дополнительной проверки, если папка уже существует.
Третий способ - использовать простое шифрование (например, rot13) для имени пользователя / идентификатора и отсчитывать количество добавляемых папок.
$username = get_user_name(); //Use the user id if you wish.
$next_folder_count = $last_folder_count + 1;
$foldername = str_rot13($username) . strval($next_folder_count);
//$foldername = hxcvf1, hxcvf2, ...
Опять же, вам придется хранить количество папок или получить его на лету из каталога. Преимущество последнего метода заключается в том, что, просто зная имя пользователя, вы можете узнать, к какому пользователю он принадлежит.