PHP | 最終更新日を取得して古いファイルを削除する方法

PHP ファイル・ディレクトリ,PHP

PHP | 最終更新日を取得して古いファイルを削除する方法

PHPで特定のディレクトリ内のファイル情報から、最終更新日を取得して古いファイルを削除するサンプルコードです。

最終更新日を取得して古いファイルを削除する

ファイルの最終更新日を取得するfilemtime()で得られる返り値はUNIXタイムスタンプですので、指定日もタイムスタンプにしています。
勿論、日時フォーマットした方がわかりやすいと思います。

  1. foreach()とglob()でディレクトリ内にある.txtファイルを取得する
  2. filemtime()で最終更新日(UNIXタイムスタンプ)を取得する
  3. time()で取得した現在時刻(UNIXタイムスタンプ)から8640000秒(100日)を引いた値と比較する

指定する日付より古い更新日のファイルかどうか調べる

コードにミスがないか確認するために指定日より古いか新しいかを調べます。

foreach (glob('dir/*.txt') as $i => $file) {
	if (filemtime($file) < time() - 8640000) {
		echo '<p>' . $file . 'は、100日前より古いファイルです</p>';
	} else {
		echo '<p>' . $file . 'は、100日前より新しいファイルです</p>';
	}
}

指定する日付より古い更新日のファイルを削除する

コードにミスがないか確認できたら、100日前より古いファイルの場合のみunlink()でファイルを削除します。

foreach (glob('dir/*.txt') as $i => $file) {
	if (filemtime($file) < time() - 8640000) {
		unlink($file);
	}
}

大事なファイルを削除してしまわない為に、間違いがないかテスト環境で確認して下さい。

タイムスタンプで現在日時から差し引いて指定する場合の早見表です。

1時間3,600秒
1日86,400秒
一週間604,800秒
30日2,592,000秒
100日8,640,000秒
365日31,536,000秒

filemtime()で取得する更新時間の更新タイミング

filemtime()で取得する更新時間とはどのタイミングで更新されているのか、または更新されないパターンの確認した時のメモです。

PHPなどの処理でファイルを移動した場合やファイル名を変更した場合は、ファイルの最終更新日は更新されませんでしたので、想定にいれておく必要があります。

PHP | filemtime()でファイルの更新時間を取得する方法 | ONE NOTES

更新されるタイミング

  • ファイルを作成した時
  • ファイルの内容を変更した時
  • 同じ内容でも保存を実行した時

更新されないパターン

  • ファイル名を変更した時(リネーム)
  • ファイルを移動した時
  • ファイルを複製した時(コピー先も)