我使用以下函数从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”。
答案 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之间上传