2013-03-06 72 views
0

在PHP中,如何在不删除目录本身的情况下每24小时删除目录中的所有文件?它必须在PHP中,它不能成为Cron Job。自动删除目录中的所有文件?

你能否提供你的代码背后的解释?我仍然在学习PHP。

谢谢!

+2

“它必须在PHP中,它不能在PHP中”:相当的挑战.... – Dave 2013-03-06 19:17:59

+0

感谢您的收获@Dave。问题已被编辑。 – 2013-03-06 19:18:46

+1

如何删除目录然后重新创建它?您只能删除内容,但更容易删除该批次。 – Dave 2013-03-06 19:19:26

回答

3

没有办法在不使用PHP的情况下在PHP中执行此操作。抱歉。

开玩笑,但如果你想这样做,你需要某种任务调度器(如cron)。

也就是说,您可以将个人计算机编程为每24小时向服务器发送一次请求,但您必须手动执行此操作或在本地安排任务。

我的观点是,你需要cron,但它不需要与PHP文件在同一主机上运行。

1

很久以前,我做了类似的事情。这是一个可怕的想法,但你可以有一个文件存储你的目录最后一次被清除。每次用户访问相关页面时,请在PHP脚本中检查此文件(您也可以检查修改的时间)。如果它足够远,请更新文件并运行删除脚本。

缺点:

  • 不保证每24小时(也许你没有游客一天)
  • 给出了每天一个用户一个更长的等待
  • 丑女

由于运行删除文件,

function delete_contents($dirpath) { 
    $dir = opendir($dirpath); 
    if($dir) { 
     while(($s = readdir($dir)) !== false) { 
      if(is_dir($s)) { 
       delete_contents($s); 
       rmdir($s); 
      } else { 
       unlink($s); 
      } 
     } 
     closedir($dir); 
    } 
} 

与此非常仔细。在原始服务器设置上,delete_contents('/')将删除每个文件。

2

没有的cron你不得不这样代码添加到一个普遍要求的页面:

$scheduledclean = strtotime("midnight"); // 00:00:00 of the current day 
$lastcleanfile = '/path/to/my/app/lastclean'; 
$lastcleantime = (file_exists($lastcleanfile)) ? filemtime($lastcleanfile) : 0; 
$curtime = time(); 

if(($curtime > $scheduledclean) && ($lastcleantime < $scheduledclean)) { 
    touch($lastcleanfile); //touch first to prevent multiple executions 
    // file cleanup code here 
} 

在第一次请求午夜后的页面清理将火过,但取得了倒霉的人只要清理需要,请求可能会延迟其页面的服务时间。你可以通过运行清理作为一个后台shell命令,如shell_exec('rm -rf /path/to/dir/* &');

相关问题