在多个子文件夹中搜索最新图像,对其进行重命名并删除子文件夹和图像

时间:2018-07-19 07:10:15

标签: php glob

对于网络摄像头,我有以下脚本,该脚本每分钟通过cron job运行时上传图片。 它会在特定文件夹中搜索图像,然后重新命名最新图像,将其复制到新目的地,然后删除其余图像。

这是脚本:

<?php
date_default_timezone_set("Europe/Athens");


//
//Watch Folder
$dir = "../upload";        
//File extention to watch
$pattern = '/^.(jpg)$/';
//Newest file check
$newstamp = 0;           
$newname = "";

if ($handle = opendir($dir)) {              
       while (false !== ($fname = readdir($handle)))  {           
         // Eliminate current directory, parent directory           
         if (preg_match(' /^\.{1,2}$/',$fname)) continue;           
         // Eliminate other pages not in pattern           
         if (! preg_match('/\.(jpg)$/',$fname)) continue;           
         // -------------

         // Collecting images
         $pinakas[] = $fname;
       }

       // Sort Images
       sort($pinakas);
       // Count
       $posot = count($pinakas);
       // Take the before last position 
       if ($posot>1) $newname = $pinakas[$posot-2];
       if ($posot==1) $newname = $pinakas[$posot-1];


}
closedir ($handle);

// $newname NEW IMAGE NAME
//COPY NEW IMAGE TO NEW PLACE

copy("../upload/$newname", "../camera1.jpg");



//DELETE IMAGES

$filesa = glob('../upload/*.jpg');

array_walk($filesa,'myunlink');

function myunlink($t)
{
    unlink($t);
}

?>

现在我有一个新的IP摄像机,它每分钟但每次都在不同的文件夹中上载图片,

Time: 10:01 ..upload/GSDGSDGSDGS/19-07-2018/001/jpg/10/01/05[R][0@0][0].jpg
Time: 10:02 ..upload/GSDGSDGSDGS/19-07-2018/001/jpg/10/02/06[R][0@0][0].jpg
Time: 10:03 ..upload/GSDGSDGSDGS/19-07-2018/001/jpg/10/03/07[R][0@0][0].jpg

我现在如何使脚本搜索..upload的所有子文件夹以获取最新的jpg抓图,将其复制到新位置并删除..upload文件夹的所有子文件夹和.jpg图像?

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可以使用递归函数来做到这一点:

function getJpgImages($dir, &$pinakas = array()){
    $files = scandir($dir);

    foreach($files as $key => $value){
        $path = realpath($dir.DIRECTORY_SEPARATOR.$value);
        if(!is_dir($path)) {
            if ( preg_match('/\.(jpg)$/',$path) )
                $pinakas[] = $path;
        } else if($value != "." && $value != "..") {
            getDirContents($path, $pinakas);
        }
    }
    return $pinakas;
}

,然后删除while循环并获取如下图像:

$pinakas = getJpgImages($dir);