Home > Server > 特定のディレクトリ下の古いファイルを掃除するPHPスクリプト

特定のディレクトリ下の古いファイルを掃除するPHPスクリプト

Photo by IanVisits

 Twitterで友達に「Webサーバ上の古いファイルを消すスクリプトが欲しい」と相談されて、PHPで作ってみました。
このまま眠らせるのも勿体ないので、ブログ書くことにしました。

 はじめはcronとfind -exec rmしようと思ったんですが、sshが使えないらしいので、PHPで作って外部から定期的に呼び出すことにします。

 下のファイルを適当な所に設置して、Webcron.orgFree Web Cron Serviceなど外部から定期的にURLをアクセスしてくれるサービスに登録します。
(これらのサービスを私は利用したことがないので、内容や安定性についてはコメントできません)

 ダウンロードはgistから。


<?php
// sweeper.php - public domain
// まずは試しに ..../sweeper.php?debug=1で実行してください

$sweep_dir = "/tmp/data/"; // 消したいディレクトリ ex) "/tmp/data/" 最後の/は必須です
$expire_at = 30; // ファイルを保存する日数を設定します
$debug = array_key_exists('debug', $_GET);
date_default_timezone_set('Asia/Tokyo');

$num = sweep_files($sweep_dir, $expire_at ,$debug);
echo "Purged $num files";

function sweep_files($sweep_dir, $expire_at, $debug) {
  $count = 0;
  if(!($dir = @opendir($sweep_dir))){ die("can't open $sweep_dir");}
  while($file = readdir($dir)) {
    if($file=='.' || $file=='..') {
      // NOOP
    }
    else if(is_dir($file)) {
      $count += sweep_files($sweep_dir . $file . '/', $expire_at, $debug);
    }
    else {
      $name = $sweep_dir . $file;
      $mtime = filemtime($name);
      if((time() - $mtime) >= 60*60*24*$expire_at) {
        if(file_exists($name)) {
          if($debug) {
            $mtime_ymd = date("Y/m/d H:i:s", $mtime);
            echo "will purge> ".$mtime_ymd." $name<br/>";
          }
          else {
            unlink($name);
          }
          $count++;
        }
      }
    }
  } // end while
  closedir($dir);

  return $count;
}

?>

Related posts

    No Related Posts

masuidrive(増井 雄一郎)
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、WEB2.0社 PingKingやニフティ アバウトミーの開発に関わる。これまでのフリー活動から転身し、2007年は1年だけ会社員として働いた後、起業のため渡米。2008年4月にBig Canvas Inc.設立。現在、米ベルビュー在住。

Comments:2

bto 10-02-18 (Thu) 2:50

system関数でtmpwatch実行する方が簡単で速いと思います
system(‘/usr/sbin/tmpwatch –ctime 720 /tmp/data’);

masuidrive 10-02-18 (Thu) 3:22

> bto

今回は、環境が特定できないので、外部コマンドを使わない方向で実装してみました。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.masuidrive.jp/index.php/2010/02/18/sweeper-php/trackback/
Listed below are links to weblogs that reference
特定のディレクトリ下の古いファイルを掃除するPHPスクリプト from @masuidrive blog

Home > Server > 特定のディレクトリ下の古いファイルを掃除するPHPスクリプト

Search
Feeds
Meta

Return to page top