删除旧文件 - 一小时前或一小时以前

时间:2012-07-07 13:37:17

标签: php

  

可能重复:
  How can I delete files older than 1 hour?

下面的代码删除名为“Images”的文件夹中的所有文件。没有抱怨一切正常,但有没有办法删除一小时前或更多小时前创建的文件?请告诉我如何,我正在努力学习。尝试重用下面的相同代码以便更好地理解,并帮助全球的PHP程序员

<?php
define('PATH', 'Images/');

function destroy($dir) {
    $mydir = opendir($dir);
    while(false !== ($file = readdir($mydir))) {
        if($file != "." && $file != "..") {
            chmod($dir.$file, 0777);
            if(is_dir($dir.$file)) {
                chdir('.');
                destroy($dir.$file.'/');
                rmdir($dir.$file) or DIE("couldn't delete $dir$file<br />");
            }
            else
                unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
        }
    }
    closedir($mydir);
}
destroy(PATH);
echo 'all done.';

3 个答案:

答案 0 :(得分:3)

您可以使用filemtime()filectime()。此外,您无法使用rmdir(),因为您要删除特定文件

你需要做什么

  1. date("U",filectime($file) - 返回您在 Unix纪元时间中修改文件的最后一次。

  2. unlink($file) - 删除指定的文件。您必须使用它而不是rmdir()

  3. 需要ifwhile / for声明:

    while($file)
    {
        if(date("U",filectime($file) <= time() - 3600)
        {
            unlink($file)
        }
    }
    
  4. 然后将其添加到您的脚本中:

    function destroy($dir) {
    $mydir = opendir($dir);
    while($file = readdir($mydir)) {
        if($file != "." && $file != "..") {
            chmod($dir.$file, 0777);
            if(is_dir($dir.$file)) {
                chdir('.');
                while($dir.$file) {
                    if(date("U",filectime($file) >= time() - 3600)
                    {
                        unlink($dir.$file)
                    }
                }
    
            }
            else
                unlink($dir.$file) or DIE("couldn't delete $dir$file<br />");
        }
    }
    closedir($mydir);
    }
    

    我希望它可以帮到你。

    <强>记住:

    • 无法在Unix / Php
    • 中获取文件创建时间
    • 如果文件的上次更改大于或等于一小时,则当前if语句将返回true

答案 1 :(得分:3)

我不会使用php,而是使用简单的shell脚本和cron作业(至少在linux上)。

如果您使用的是Linux,那么脚本将类似于:

#! /bin/sh
find /path/to/Images/ -mmin +60 -exec rm -f {} \;     // modification date, not creation date...

我会用cron每小时自动运行一次。

完成后,cron条目如下所示:

0 * * * * /path/to/shell/script.sh    // run script every whole hour

不是问题的直接答案,但对于评论来说太长了,也许是一个可能的解决方案,因为重复问题中的所有答案都集中在php上......

答案 2 :(得分:0)

在Unix中,无法使用filectime

检索创建时间,仅检索上次修改日期

但是,如果你使用的是Windows系统,那就完全相反了。使用相同的方法filectime,您将检索创建时间而不是上次更改的时间。