【问题标题】:PHP create new folders for file uploadPHP为文件上传创建新文件夹
【发布时间】:2017-06-15 12:09:53
【问题描述】:

想法是将用户个人资料照片存储到文件服务器。我已经完成了将部分上传到静态文件夹,但我想让它有点动态。

正在生成的文件名如下:$userid . '-' . round(microtime(true)) . '.jpg';

我想存储基于$userid 的图像,每个文件夹 1000 个。

所以它必须检查$userid <= 1000 和文件夹是否不存在,创建名为000001-100000 的新文件夹。

例如如果$userid = 1001它必须检查文件夹是否不存在并创建名称为002001-002000的新文件夹等等。

我怎样才能动态地实现它?可能有超过 100 000 个用户,因此请按照我认为不是那么好的想法进行检查:

if (!file_exists('images/000001-001000')) && $userid <= 1000 {
    mkdir('images/000001-001000', 0777, true);
}
if (!file_exists('images/001001-002000')) && $userid > 1000  && $userid <= 2000 {
    mkdir('images/001001-002000', 0777, true);
} 

附言这不是标记的重复,我需要每个文件夹存储 1000 张照片,而不是为每个用户创建特定的文件夹。

【问题讨论】:

  • if $userid = 0005 文件夹名称如何?
  • 为 100 000 个用户创建文件夹会使服务器变得混乱。为图像创建一个随机生成的字符串,并作为该用户的 blob 数据存储在数据库中。检索起来也很容易。
  • 为什么会出现并发症?在 images 目录中每个用户不只有一个文件夹是否有特殊原因?
  • 不建议用户将文件保存在数据库中。这不是好方法@VenkatLokeswar

标签: php file-upload upload


【解决方案1】:
$count = floor($userid / 1000);
$begin = ($count * 1000) + 1;
$end = ($count + 1) * 1000;
$strBegin = $begin;
$strEnd = $end;
if($begin==1){
  $strBegin = "0001";
}
if(is_dir('images/'.$strBegin.'-'.$strEnd)==false){
  mkdir('images/'.$strBegin.'-'.$strEnd);
}

【讨论】:

    【解决方案2】:

    试试这个我已经创建了递归方法来检查值。然后根据它创建目录

    function get_thousand_value($userid,$value_min)
    {
        if($userid <= $value_min){
            $return_val = $value_min;
        }
        else
        {
            $value_min += 1000;
            $return_val =get_thousand_value($userid,$value_min);
        }
        return $return_val;
    }
    $value_min = 1000;
    $last_val =  get_thousand_value($userid,$value_min);
    $start_val = ($last_val == 1000 ? '0001' :  ($last_val - 999));
    $dir_name= 'images/'.$start_val."-".$last_val;
    
    if (!file_exists($dir_name)) {
        mkdir($dir_name, 0777, true);
    }
    

    【讨论】:

      【解决方案3】:

      只需生成一次文件夹。如果无法预测最后是哪个文件夹,可以多生成5-50个文件夹,用cron检查;我是否需要生成更多文件夹?

      【讨论】:

      • 听起来是个坏主意。怎么存储图片?它需要检查用户id是否在1到1000之间并存储到文件夹000001-001000,如果用户id在1001到2000之间应该存储到002001-002000等等。
      • 在这种情况下,您无需检查文件夹是否存在 - 无需对硬盘进行额外查询。是的,你仍然要检查 user_id,没有不同的方法
      猜你喜欢
      • 2014-02-26
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2014-01-06
      • 2012-04-22
      • 2022-01-25
      • 2023-04-09
      相关资源
      最近更新 更多