在PHP虚拟主机上,不会有系统级的权限。
目标如下:现有a文件夹,放着一些用户生成的临时文件,由于空间大小的限制,需要定时做删除,期望每隔一个小时遍历a目录,删除a下距离那一时刻超过5分钟以上的文件。因为对PHP不是太熟,最好有代码,结贴会很快,谢谢

解决方案 »

  1.   

    测试一下,还可以,但是不知道服务器效率如何。
    附上代码:<?php
    ignore_user_abort(); //客户端断开时,可以让脚本继续在后台执行set_time_limit(0);   //忽略php.ini设置的脚本运行时间限制$interval = 15*60;      //设置执行周期,单位为秒,e.g. 15分钟为 15*60=900do{
    //脚本内容
    /*
     * 这个是我的测试脚本
    $fp = fopen('testtxt.txt','a');
    fwrite($fp,'test');
    fclose($fp);
    */
    $dir = "tmp/";   //你的临时目录位置
    if(is_dir($dir)) {
    if($od=opendir($dir)) {
    while(($file=readdir($od))!==false) {
    unlink($file); //读取目录内的文件并删除
    }
    closedir($od);
    }
    }

    sleep($interval);   //执行一个周期后,休眠$interval时间,休眠结束后脚本继续执行

    }while(true);     //周期性执行脚本
      

  2.   

    参考:
    php定时脚本 http://blog.csdn.net/webdesman/archive/2009/09/02/4510372.aspxphp删除文件 http://believable.blog.163.com/blog/static/108570833201011431623142/
      

  3.   

    改进一下文件删除的代码<?php
    ignore_user_abort(); //客户端断开时,可以让脚本继续在后台执行set_time_limit(0);   //忽略php.ini设置的脚本运行时间限制$interval = 15;      //设置执行周期,单位为秒,e.g. 15分钟为 15*60=900do{
    //脚本内容
    /*
     * 这个是我的测试脚本
    $fp = fopen('testtxt.txt','a');
    fwrite($fp,'test');
    fclose($fp);
    */
    $dir = "tmp";   //你的临时目录位置,请注意,文件夹最后不要加上"/"
    if(is_dir($dir)) {
    if($od=opendir($dir)) {
    while(($file=readdir($od))!==false) {

    if(is_file("$dir/$file")) {

    unlink("$dir/$file"); //读取目录内的文件并删除
    }
    }
    closedir($od);
    }
    } else {
    echo $dir." is not a directory";
    }

    sleep($interval);   //执行一个周期后,休眠$interval时间,休眠结束后脚本继续执行

    }while(true);     //周期性执行脚本
      

  4.   

    谢谢discus815
    有两个问题:
    1.假设服务器重启,这个文件要保持运行,是不是我至少要触发一次
    2.如果删除文件失败,或者当前文件正在被使用,程序会不会报错并且影响其他文件的删除
      

  5.   

    1、服务器重启之后,是要再运行该脚本的。2、你说的第二个问题,我刚刚测试了一下,发现即使一个文件正在使用,php的unlink函数也可以将其删除。一般服务器上面正在使用的文件都缓存到客户端的内存中,所以删除该文件我觉得问题也不大。
      

  6.   

    谁帮我看看这个帖子
    http://topic.csdn.net/u/20110615/09/78c6168f-e2f7-4222-a8b4-0ed9b21d94be.html
    都沉下去好久好久了。
      

  7.   

    我倒是有点思路,但是PHP语言不太熟:
    在123.txt设定个标志位,让上面的程序while循环每次执行前读一下这个txt里的标志位,如果为1就继续,为0就推出循环,是不是这个文件就不再运行了。具体语句麻烦谁熟悉PHP的写下了
      

  8.   

    好吧,就根据你的思路。帮你完善一下,呵呵
    <?php
    $flag = 1; //将执行标志设置为1,默认为执行ignore_user_abort(); //客户端断开时,可以让脚本继续在后台执行set_time_limit(0);   //忽略php.ini设置的脚本运行时间限制$interval = 15*60;      //设置执行周期,单位为秒,e.g. 15分钟为 15*60=900do{
    //脚本内容
    /*
     * 这个是我的测试脚本
    $fp = fopen('testtxt.txt','a');
    fwrite($fp,'test');
    fclose($fp);
    */

    /*
    读取执行标志flag
    */
    $flagfile = "flag.txt";   //标志放置在文件“flag.txt”中。“0”表示停止执行,“1”表示继续执行 if(file_exists($flagfile) && is_readable($flagfile)) { //读取文件内容
    $fh = fopen($flagfile,"r");

    while (!feof($fh)) {
    $flag = fgets($fh);   //存储标志
    }

    fclose($fh);
    }

    $dir = "tmp";   //你的临时目录位置,请注意,文件夹最后不要加上"/"
    if(is_dir($dir)) {
    if($od=opendir($dir)) {
    while(($file=readdir($od))!==false) {

    if(is_file("$dir/$file")) {

    unlink("$dir/$file"); //读取目录内的文件并删除
    }
    }
    closedir($od);
    }
    } else {
    echo $dir." is not a directory";
    }

    sleep($interval);   //执行一个周期后,休眠$interval时间,休眠结束后脚本继续执行

    }while($flag);     //判断$flag的值,周期性执行脚本