仅选择在15:00:00和15:59:59之间上传的图像

时间:2011-09-12 16:21:56

标签: php

我使用以下函数从dir获取所有图像,但是我不想将所有图像放在$files数组中,而是想调整它,所以它只需要在15之间上传图像: 00:00和15:59:59 - 今天。

 function get_files($images_dir,$exts = array('jpg')) {
      $files = array();
      if($handle = opendir($images_dir)) { 
        while(false !== ($file = readdir($handle))) {
          $extension = strtolower(get_file_extension($file));
          if($extension && in_array($extension,$exts)) {
            $files[] = $file;
          }
        }
        closedir($handle);
      }
      return $files;
    }

但我无法弄清楚如何做到这一点,甚至更少有效率,因为该文件夹有大约9000张图像。任何人都能指出我正确的方向吗?

注意:所有图像都以日期时间命名为“Snapshot-20110910-103242.jpg”。

5 个答案:

答案 0 :(得分:2)

function get_files ($images_dir, $exts = array('jpg'), $start = '15:00:00', $end = '15:59:59', $usemtime = FALSE) {

    /**
    * str  $images_dir - Path to images directory
    * arr  $exts       - Permitted file extensions
    * str  $start      - Start time (H:i:s)
    * str  $end        - End time (H:i:s)
    * bool $usemtime   - Use file modified time instead of file created time
    */

    // Replace \ with / and strip trailing slashes so we can easily create a valid file path
    $images_dir = rtrim(str_replace('\\','/',$images_dir),'/');

    // Get start/end times
    $starttime = strtotime($start);
    $endtime = strtotime($end);

    // Array to hold the results
    $files = array();

    // Open the directory and loop it
    if ($handle = opendir($images_dir)) { 

        while (($file = readdir($handle)) !== FALSE) {

            // Get this file's extension and created/modified time
            $extension = strtolower(get_file_extension($file));
            $filetime = ($usemtime) ? filemtime("$images_dir/$file") : filectime("$images_dir/$file");

            // Check the file's extension and created or modified time
            // I have removed the first $extension check because it is unnecessary)
            if (in_array($extension,$exts) && $filetime >= $starttime && $filetime <= $endtime) {
                $files[] = $file;
            }

        }

        // Close the directory
        closedir($handle);

    }

    // Return the list
    return $files;

}

答案 1 :(得分:1)

您可以使用the glob function过滤很多图片。所以,您使用的glob调用将是以下内容:

glob( $images_dir . '/Snapshot-20110912-15????.jpg' );

答案 2 :(得分:0)

使用scandir获取目录中所有文件的列表,然后循环该数组执行类似的操作以获取匹配的文件名

function get_files($images_dir,$exts = array('jpg'))
{
    $wantedFiles = array();
    $scannedFiles = scandir($images_dir);
    $todaysDate = date('Ymd');

    foreach ($scannedFiles AS $file)
    {
        $filenameBits = explode('-', $file);

        // Get the info we want
        $numFilenameBits = count($filenameBits);
        $fileData = explode('.', $filenameBits[$numFilenameBits - 1]);

        if (in_array($fileData[1], $exts) && $filenameBits[$numFilenameBits - 2] == $todaysDate && $fileData[0] > 150000 && $fileData[0] < 155959)
            $wantedFiles[] = $file;
    }

    return $wantedFiles;
}

答案 3 :(得分:0)

这将获取文件的“最后修改”时间戳,并确定它是否在下午3点的小时内被修改。

$stat = stat($images_dir . '/' . $file);

$mtime = $stat[9];
if (date('G', $stat[9]) == 15) {
    ... file was last modified sometime during 3-4pm
}

答案 4 :(得分:0)

您可以获取文件名,在本例中为Snapshot-20110910-103242.jpg并使用substr来获取文件名的时间,如下所示:

$var = "Snapshot-20110910-103242.jpg";
$var = substr($var, -10,6);

现在您有时间(103242),只需使用if语句检查图像是否在15:00:00到15:59:59之间上传