0

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

您能否也提供代码背后的解释?我还在学习PHP。

谢谢!

4

4 回答 4

3

如果不使用 PHP,则无法在 PHP 中执行此操作。对不起。

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

也就是说,您可以对您的个人计算机进行编程,使其每 24 小时向服务器发送一次请求,但您要么必须手动完成,要么在本地安排任务。

我的意思是,您需要 cron,但它不需要与 PHP 文件在同一主机上运行。

于 2013-03-06T19:17:58.407 回答
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/* &');

于 2013-03-06T19:53:00.213 回答
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('/')将删除每个文件。

于 2013-03-06T19:43:34.963 回答
0
  1. 制作一个删除目录中所有文件的 PHP 脚本,查找函数readdir()unlink()来删除文件。

  2. 设置Cron 作业以每 24 小时自动运行一次脚本。您必须如何执行此操作完全取决于您的主机。您还可以使用以下网站:http ://www.google.nl/search?q=cronjobs+webservice

祝你好运!

于 2013-03-06T19:22:22.457 回答