サーバーに保存したバックアップファイルのうち、古いファイルをcronで自動的に削除する方法を紹介する。

今回は、過去7日分のファイルだけを残し、それ以前のファイルを削除するコードをPHPで書く例を見ていく。

PHPファイルの用意

まず、メインの処理をおこなうPHPファイル(fileRemove.php)を用意し、以下のコードを記述する。

#!/usr/bin/php 
<?php 
// php実行ファイルのパス 
set_include_path('/usr/bin/php'); 

// バックアップファイルの保存先パス
$bkDir = "/var/www/bk/"; 

// 古いバックアップファイルを削除する(過去7日分のバックアップデータだけ残し、それより古いファイルは削除) 
$deleteDay = date('Y/m/d', strtotime("-6day")); 

$dir = opendir($bkDir); 
while(false !== ($file = readdir($dir))) { 
  if($file[0] != ".") { 
    $fileTime = date('Y/m/d', filemtime($bkDir.$file)); 
    if(strtotime($deleteDay) > strtotime($fileTime)) { 
      unlink($bkDir.$file); 
    } 
  } 
}

簡単に解説すると、まず7行目までは事前準備としての変数設定。

PHPの実行ファイルパスや、バックアップファイルの保存先は環境に応じて適宜変える必要がある。

10行目の$deleteDayで、過去何日分のファイルを残すかを指定している。
過去2週間分のファイルを残したければ、-13dayと指定すれば良い。

12行目以降では、バックアップファイルの保存先ディレクトリからファイルをひとつずつ辿っていき、ファイルの作成日時を確認して$deleteDayとの比較をおこなっている。

指定日より作成日時が古ければ、unlink()関数でファイルを削除する。

cronで自動実行の設定をおこなう

ファイルが用意できたら、cronで自動実行の設定をおこなう。

$ crontab -e

TZ="Japan"
59 23 * * * php /home/hoge/fileRemove.php

この例では毎日23:59に処理を実行させるようにした。