如何根据PHP上次修改日期创建文件夹?

时间:2016-08-24 17:09:29

标签: php

在我的服务器中,我有一个包含数千张图像的唯一upload文件夹,因此我想使用子文件夹重新组织它们,例如../uploads/img/year/month/filename

对于上传的所有新图片,我使用这段适用于我的代码:

$path = __DIR__ .'/../uploads/img/' . date("Y") . '/' . date("m") . '/' . $filename;

if (!is_dir($path)) {
    mkdir($path, 0775, true);
}

我如何为已经在上传文件夹中的所有文件执行相同的操作,以创建新目录并按照上次修改日期对所有文件进行排序?

例如

filename | last modified date
------   | ------
1.jpg    | 24/02/2016
2.jpg    | 24/04/2016  
3.jpg    | 24/06/2016  
4.jpg    | 20/08/2016  
5.jpg    | 24/08/2016  

:定位:

../uploads/img/2016/02/1.jpg
../uploads/img/2016/04/2.jpg
../uploads/img/2016/06/3.jpg
../uploads/img/2016/08/4.jpg
                      /5.jpg

我的尝试

function grab_pictures() {
    $mpath = __DIR__ .'/../uploads/media';

    foreach (glob("$mpath/*") as $file) { 
        $lastmoddate = filemtime($file);
        $basename = basename($file);     
        $month = date("m", filemtime($lastmoddate));
        $year = date("Y", filemtime($lastmoddate));
        $newPath = __DIR__ .'/../uploads/media/' .$year. '/' .$month. '/';

        if (!is_dir($newPath)) {
            mkdir($newPath, 0775, true);
        }

        $newName = '/' .$year. '/' .$month. '/' .$basename;

        $this->db->query(sprintf("UPDATE `images` SET `path` = '%s', `time` = `time`", $newName));

        // Move the file into the uploaded folder
        move_uploaded_file($basename, $newPath);
    }

}

但它不起作用,没有文件被移动,只创建了一个文件夹(1970/01)

function grab_pictures() {
    $mpath = __DIR__ .'/../uploads/media';

    foreach (glob("$mpath/*") as $file) {
      if(!is_dir($file)){ 
        $lastmoddate = filemtime($file);
        $basename = basename($file);     
        $month = date("m", $lastmoddate);
        $year = date("Y", $lastmoddate);
        $newPath = __DIR__ .'/../uploads/media/' .$year. '/' .$month. '/';

        if (!is_dir($newPath)) {
            mkdir($newPath, 0775, true);
        }

        $newName = '/' .$year. '/' .$month. '/' .$basename;

        $old_Path = $mpath. '/' .$basename;
        $new_Path = $mpath.$newName;

        $this->db->query(sprintf("UPDATE `tracks` SET `art` = '%s', `time` = `time` WHERE `art` = '%s'", $newName,$basename));

        // Move the file
        rename($old_Path, $new_Path);
      }
    }

}

1 个答案:

答案 0 :(得分:1)

您可以尝试PHP中提供的p{ clear: both; margin: 0; padding: 0; display:block; } span.blue{ background: blue; } span.green{ background: green; } span.black{ background: black; } span.circle{ display:inline-block; width: 15px; height: 15px; -webkit-border-radius: 15px; border-radius: 15px; vertical-align:middle; } span.desc{ display:inline-block; width: 115px; vertical-align:middle; }功能。它返回可以与日期函数
一起使用的时间戳 试试<div class="container"> <p> <span class="blue circle"></span> <span class="desc">Blue text</span> </p> <p> <span class="green circle"></span> <span class="desc">Green text</span> </p> <p> <span class="black circle"></span> <span class="desc">black text</span> </p> </div>

在循环遍历所有文件的for循环中运行filemtime函数。这可能是循环的流程。

  1. 检查上次修改日期(filemtime(文件名))
  2. 将其存储在变量中(例如,mdate)
  3. 检查文件夹是否存在日期(mdate)
  4. 如果没有,请创建一个文件夹(使用$ path变量)
  5. 将文件移至新文件夹
  6. 将此循环用于将来上传的所有文件。
  7. 请在此处查看以下代码段。它可能就是你正在寻找的东西。

    filemtime(filename)

    我希望它有助于澄清一些问题。 请检查此reference page for the usage of filemtime()