删除文件夹中的所有照片,但不删除PHP上的最后5个

时间:2011-01-18 04:01:21

标签: php

我想创建一个PHP脚本,删除一个文件夹中的所有照片,但不是最后五个,我不知道如果在PHP中可以知道创建文件的日期,我真的不知道如何这样做,谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用filemtime获取文件的上次修改时间。你提到了创作日期;在Windows系统上,您可以使用filectime获取创建时间,但是在基于Unix的系统上,由于Unix系统不存储文件的创建日期,因此只会获得更改时间。

获得此信息之后,一种基本技术是循环遍历文件夹中的每个文件以获取其修改时间,然后删除除最近5次之外的所有文件。

一个简单的例子,虽然可能有更简洁的方法,

if ($handle = opendir('/path/to/your/folder')) 
{
    $files = array();
    while (false !== ($file = readdir($handle))) 
    {
        if (!is_dir($file))
        {
            // You'll want to check the return value here rather than just blindly adding to the array
            $files[$file] = filemtime($file);
        }
    }

    // Now sort by timestamp (just an integer) from oldest to newest
    asort($files, SORT_NUMERIC);

    // Loop over all but the 5 newest files and delete them
    // Only need the array keys (filenames) since we don't care about timestamps now as the array will be in order
    $files = array_keys($files);
    for ($i = 0; $i < (count($files) - 5); $i++)
    {
        // You'll probably want to check the return value of this too
        unlink($files[$i]);
    }
}

答案 1 :(得分:0)

不确定这是否有帮助,但我有类似的需要想知道文件创建时间,所以我可以根据上传/创建时间订购它们:

//获取所有带.jpg,.gif和.png扩展名的图像文件

$images = glob('images/{*.jpg,*.gif,*.png}', GLOB_BRACE);

//按上传/上次修改时间排序图片

array_multisort(array_map('filemtime', $images), SORT_NUMERIC, SORT_DESC, $images);

希望这可以帮助你以某种方式或其他人来帮助你。

答案 2 :(得分:0)

PHP手册中的一些注释

  

注意:注意:在大多数Unix文件系统中,   一个文件被认为是改变了   inode数据被更改;也就是说什么时候   权限,所有者,组或   来自inode的其他元数据是   更新。另请参见filemtime()(其中   是你想要的时候想要的   创建“上次修改”的页脚   网页)和fileatime()。

     

注意:还要注意在某些Unix中   文本引用文件的ctime   作为时间的创造时间   文件。这是错的。没有   大多数Unix文件的创建时间   Unix文件系统。

     

注意:请注意时间分辨率可能   不同于一个文件系统   另一个。

从那时起,我建议您使用以下内容命名文件:“pic-123456789.jpg” “123456789”代表创建日的时间()值,然后执行文件夹扫描,获取时间,并删除所有但不是最后5个