ラボ > PHP:ファイル関連、サーバ

PHP 最終更新日が〇時間以前なら削除したい

例えば、1週間以上前の一時保存のファイルをマルっと削除したい。

作成日:2018-07-10, 更新日:2018-07-10

基本

方法はいくつかある。
・PHPでファイル一覧を取得して、条件にあうものを削除
・Linuxとかのコマンドを叩く
・LinuxとかのコマンドをPHPで叩く

Linuxとかのコマンド:tmpwatch

「tmpwatch」というコマンドがあるそうだ。

▼24時間アクセスがない「/tmp」以下をすべて削除

# tmpwatch 24 /tmp

※「秒」指定じゃなく「時間」指定

時間指定じゃなく分、日で指定したい

「m, h, d」で「分、時、日」を指定できる。
※指定なしは「時」になる。

▼10分

# tmpwatch 10m /tmp

▼24時間(省略時:「h」は省略可能)

# tmpwatch 24 /tmp

▼7日

# tmpwatch 7d /tmp

オプション

-u, –atime 最終アクセス時刻
-m, –mtime 最終更新時刻
-c, –ctime 最終ステータス変更時刻(パーミッション、所有者、グループ、または他のメタデータが変更された時刻)
-M, –dirmtime 最終ディレクトリ更新時刻
-a, –all 全てのファイルを削除
-d, –nodirs ディレクトリは削除しない
-f, –force root権限なくても削除を行う
-l, –nosymlinks シンポリックリンクは削除しない
-q, –quiet コマンドライン表示しない(エラー時のみ表示)
-s, –fuser fuserコマンドを使ってファイル状態を確認
-t, –test テストモード(実際削除処理は走らない)
-U, –exclude-user=user 指定するユーザのファイルを削除対象外
-v, –verbose 詳細モード
-x, –exclude=path 指定するファイル・フォルダを削除対象外にする

PHPで叩く

$expire = 24*7; // 1週間:「秒」じゃなくて「時間」指定
$dir = APPPATH . '/tmp';

// -m:更新日、-d:ディレクトリは削除しない
$cmd = 'tmpwatch -m ' . $expire . ' -d ' . $dir;
exec($cmd);