0

我正在尝试找出一种用于存储图像等用户内容的文件夹结构,该结构适用于大量用户。我打算使用类似... 000/000/001 (user id 1) ....999 max subfolder per folder。

但我想隐藏用户总数,从 1 开始很容易看到。我应该从 349203480 之类的随机数开始吗?我对如何以这种方式根据 ID 计算文件夹感到困惑。有没有更好/更简单的方法?

4

2 回答 2

1

使用 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 的引用

于 2011-07-10T05:50:28.690 回答
0

好吧,最简单和最简单的方法就是您建议的方法。使用随机数预先开始统计用户。

另一种方法是将随机数附加到您的用户 ID。

$userid = get_user_id();
$foldername = strval($userid) . strval(rand(1, 999));

//$foldername = 11, 231, ...

但是当然,上述方法有检查文件夹是否已经存在的开销。

第三种方法是在用户名/id 上使用简单的加密(例如 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, ...

同样,您必须存储文件夹的数量,或者从目录中即时获取它。最后一种方法的好处是,我们只需知道文件夹名称,就可以找出它属于哪个用户。

于 2011-07-10T06:10:08.047 回答