1

下面的代码删除了一个名为“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.';
4

3 回答 3

3

您可以使用filemtime()filectime()。另外,不能使用rmdir(),因为要删除特定文件

你必须做什么

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

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

  3. 需要一个ifand while/for语句:

    while($file)
    {
        if(date("U",filectime($file) <= time() - 3600)
        {
            unlink($file)
        }
    }
    

然后将其添加到您的脚本中:

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
于 2012-07-07T14:02:12.507 回答
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 上......

于 2012-07-07T14:05:36.087 回答
0

在 Unix 中,无法检索创建时间,只能使用filectime检索最后修改日期

但是,如果您使用的是 Windows 系统,则完全相反。使用相同的方法 filectime,您将检索创建时间,而不是最后更改的时间。

于 2012-07-07T13:57:38.563 回答