自动删除目录中的所有文件?

时间:2013-03-06 19:17:07

标签: php file webserver file-management

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

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

谢谢!

4 个答案:

答案 0 :(得分:3)

如果不使用PHP,就无法在PHP中执行此操作。遗憾。

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

也就是说,您可以对您的个人计算机进行编程,以便每24小时将请求发送到服务器,但您可能需要手动执行此操作或在本地安排任务。

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

答案 1 :(得分: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/* &');

)运行来缓解此问题

答案 2 :(得分: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('/')将删除每个文件。

答案 3 :(得分:0)

  1. 创建一个PHP脚本,删除目录中的所有文件,查找函数readdir()unlink()以删除文件。

  2. 设置Cron Job以每24小时自动运行脚本。你如何做到这一点完全取决于你的主人。您还可以使用以下网站:http://www.google.nl/search?q=cronjobs+webservice

  3. 祝你好运!