// setup timezone and get timestamp for yesterday
date_default_timezone_set('Europe/Berlin'); // change to yours
$yesterday = strtotime('-1 day', time());
// setup path to cache dir and initialize iterator
$path = realpath('/path/to/files'); // change to yours
$objects = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path));
// iterate over files in directory and delete them
foreach($objects as $name => $object){
if ($object->isFile() && ($object->getCTime() < $yesterday)) {
// unlink($object);
echo PHP_EOL, 'deleted ' . $object;
}
}
/* Detele Cache Files Here */
$dir = "cache/"; /** define the directory **/
/*** cycle through all files in the directory ***/
foreach (glob($dir."*") as $file) {
//foreach (glob($dir.'*.*') as $file){
/*** if file is 24 hours (86400 seconds) old then delete it ***/
if (filemtime($file) < time() - 3600) { // 1 hour
unlink($file);
}
}
// setup timezone and get timestamp for yesterday
date_default_timezone_set('Europe/Berlin'); // change as appropriate
$yesterday = strtotime('-1 day', time());
8条答案
按热度按时间oxosxuxt1#
我认为您可以通过使用readdir循环目录并根据时间戳删除来完成此操作:
if((time() - $filelastmodified) > 24*3600)
将选择24小时以上的文件(24小时乘以每小时3600秒)。如果您想要天,则对于一周以上的文件,它应该读取例如7243600。另外,请注意
filemtime
返回文件的上次修改时间,而不是创建日期。tf7tbtn22#
应该是
以避免
.
和..
目录出现错误。bksxznpy3#
以下函数根据文件的创建日期列出文件:
现在,您可以遍历列表以查看它们的日期并相应地删除:
rpppsulh4#
尝试SplIterators
Creation Time is only available on Windows.
vlurs2pr5#
我正在使用这个,希望有帮助。另外,我在2023年2月13日更新了这个,访问:https://www.arnlweb.com/forums/server-management/efficient-php-code-for-deleting-files-delete-all-files-older-than-2-days-the-right-way/
uqzxnwby6#
注意Gordon时间比较(见上文:https://stackoverflow.com/a/2205833/1875965)是与“天”而不是“24小时”比较时唯一正确的值,因为并非所有天都有24小时(夏季/冬季等)。
例如,使用
当比较文件日期时。
这可能不是一个大问题,但当您使用周/月等时,可能会导致意外的行为。我发现最好坚持使用上述方法,因为它会使任何涉及日期/时间的过程保持一致,并避免混淆。
还要检查文件日期的时区,因为有时PHP的默认时区与系统时区不同。
问候你桑德拉。
jxct1oxe7#
smtd7mpg8#
通过修改@pawel的解决方案,我创建了下面的函数。一开始我忘了在文件名中添加“路径”,这花了我半个小时才找到。