2016-09-19 84 views
1

我想检查我的服务器上的文件夹是否每隔30分钟超过一个小时,因此我设置了一个cronjob来执行此操作。由于我相当新的PHP,我不得不浏览一下,找到一个解决方案,不删除我的父母/目标目录,我找到了一个!不要删除年龄小于1小时的文件

<?php 
deleteContent("/var/www/html/downloads/"); 
function deleteContent($path){ 
    try{ 
    $iterator = new DirectoryIterator($path); 
    foreach ($iterator as $fileinfo) { 
     if($fileinfo->isDot())continue; 
     if($fileinfo->isDir()){ 
     if(deleteContent($fileinfo->getPathname())){ 
     if((time()-filectime($fileinfo->getPathname())) < 600) 
     { 
      @rmdir($fileinfo->getPathname()); 
     } 
     } 
    } 
     if($fileinfo->isFile()){ 
     if((time()-filectime($fileinfo->getPathname())) < 600) 
     { 
     @unlink($fileinfo->getPathname()); 
     } 
     } 
    } 
    } catch (Exception $e){ 
    // write log 
    return false; 
    } 
    return true; 
} 
?> 

注意,if((time()-filectime($fileinfo->getPathname())) < 600)是我找到解决我的时间问题的办法。

该脚本不应该删除小于1小时的文件夹或文件,所以我花了我们现在的时间,并减去了该文件/文件夹上次更改的时间,并将其与600秒( 10分钟)仅用于测试目的。

不幸的是,脚本仍然会删除每个文件,而不管它何时创建。

我做错了什么或有没有人有另一种方法?

感谢

+0

打印time()和filectim e($ fileinfo-> getPathname()函数并检出它们。 – Naga

回答

1

有时调用底层操作系统的功能是更好的方法

exec('find /var/www/html/downloads/ -type f -mmin +60 -exec rm {} \;'); 

高管:http://php.net/manual/en/function.exec.php
PHP函数来运行CLI命令 发现,该发现在指定的路径中的文件,文件时间大于60分钟的类型f(对于文件),然后执行(run)rm这是linux删除(删除)

+0

谢谢你的回答!我不仅是PHP新手,而且也是Ubuntu,因为这是我使用服务器的第一个项目!你能否提供关于什么都在做的信息,因为我没有完全得到代码?谢谢:) – userlip

+0

而且它这样做递归?因为我的树是这样的: Target-> FoldersXYZ-> FilesXYZ 编辑:那么文件夹呢? – userlip

+0

使其递归添加'-r'。 '-type f'只会匹配文件,如果你想删除文件夹,请将其删除 – nogad

相关问题