组织&名称上传的文件

时间:2013-01-20 22:55:41

标签: php file-upload

ogranise和命名上传文件的最佳方法是什么?

我可能错了,但我觉得将所有文件保存在一个目录中并不好,因为如果需要浏览文件,这会导致文件系统变慢?

欢迎所有的想法和想法

干杯

3 个答案:

答案 0 :(得分:0)

我使用这样的函数为上传的文件生成3级文件夹的树:

function get_1000_path($id)
{
  $id = strval($id);
  $id = str_repeat("0", 9 - strlen($id)).$id;

  $path = substr($id, 0, 3)."/".substr($id, 3, 3)."/".substr($id, 6, 3)."/";

  return $path;
}

因此,一个子文件夹中的最大文件数为1000,文件系统将正常运行

答案 1 :(得分:0)

这取决于您的应用程序的工作方式。

如果它像用户画廊一样,我只会为每个用户创建一个文件夹,然后一年 - >月结构。

如果文件通常由所有用户共享,我会根据时间(年 - >月 - >周 - >日)将它们组织在不同的目录中。如果您的网站不期望大量流量,一年 - >月分应该足够了。

我会使用uniqid()函数重命名上传的文件,这样就不需要检查覆盖或重复了。

答案 2 :(得分:0)

我认为这取决于您的系统/网站或需求,即。对于用户门户而言,它可能更像user_images/USER-ID/filename-unid_id.jpg。例如,对于新闻网站,这可能是有用的uploads/news_images/YYYY/MM/DD/filename-unid_id.jpg类型。此时它不需要大的unid_id,如md5或其他东西,你可以使用php hash,如:$unid_id = hash('crc32b', microtime())。 Cos有强硬的洗脱可能性。

// in your upload file
$dir = "uploads/news_images/". date("Y-m-d");
if (!is_dir($dir)) {
    mkdir($dir, 0777, true);
    if (!is_writable($dir)) chmod($dir, 0777); // try again changing mod
}

但是,无论是两个例子,您都需要存储每个文件的文件名/路径。通过这种方式,您可以使用此方法存储数据(我个人在存储许多数据时使用json格式以及如果我不需要搜索);

// table "news_images"
id | file_name | file_data
--------------------------
1  | blue fish | {"path":"2012/12/12", "slug":"blue-fish-9834a12b", "ext":"jpg" ...
祝你好运..