Photo by IanVisits
Twitterで友達に「Webサーバ上の古いファイルを消すスクリプトが欲しい」と相談されて、PHPで作ってみました。
このまま眠らせるのも勿体ないので、ブログ書くことにしました。
はじめはcronとfind -exec rmしようと思ったんですが、sshが使えないらしいので、PHPで作って外部から定期的に呼び出すことにします。
下のファイルを適当な所に設置して、Webcron.org、Free 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;
}
?>
bto
system関数でtmpwatch実行する方が簡単で速いと思います
system(‘/usr/sbin/tmpwatch –ctime 720 /tmp/data’);
masuidrive
> bto
今回は、環境が特定できないので、外部コマンドを使わない方向で実装してみました。