下面的代码删除名为" 图像 "的文件夹中的所有文件。没有抱怨一切正常,但是有没有办法只删除一个小时前或一个小时前创建的文件?请告诉我如何,我试图通过实践来学习,拜托。尝试在下面重用相同的代码,以便更好地理解并帮助世界各地的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.';
您可以使用
filemtime()
或filectime()
。此外,您不能使用 rmdir()
,因为您要删除特定文件。
你必须做什么
date("U",filectime($file)
- 返回上次在 Unix 纪元时间修改文件的时间。unlink($file)
- 删除指定的文件。你必须使用它而不是rmdir()
.需要
if
和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
文件上次更改时间是否超过或等于一小时前
我不会为此使用 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 上......
在 Unix 中,不可能检索创建时间,只能使用 filectime 检索上次修改日期
但是,如果您使用的是Windows系统,则情况恰恰相反。使用相同的方法 filectime,您将检索创建时间,而不是上次更改的时间。