シェアする

  • このエントリーをはてなブックマークに追加

CakePHPで最終更新日時を評価してファイルを削除

CakePHP2.6系

ディレクトリにあるファイルを走査して、最終更新日時が現時刻の1時間前以前なら削除する処理を書きました。

HogeController.php

	public function cleanup() {
		App::uses('Folder', 'Utility');
		App::uses('File', 'Utility');

		$uploadPath = WWW_ROOT.'file'.DS.'dir_name';
		$pdfDir = new Folder($uploadPath);
		$files = $pdfDir->find('.*\.pdf');	// 正規表現でフィルタリングできます

		foreach ($files as $fileName) {
			$file = new File($uploadPath.DS.$fileName);
			$lastUpdateTime = $file->lastChange();
			if ($lastUpdateTime < time() - 3600) {
				// 最終更新日時が1時間前以前なら削除
				$file->delete();
			}
		}

		$files = $pdfDir->find('.*\.pdf');
	}

参考: Folder & File ? CakePHP Cookbook 2.x ドキュメント

これをcronで回すなら、こんな感じ。

まずはcronから実行するshellを用意します。
app/Console/Command/HogeShell.php

App::uses('HogeController', 'Controller');
 
class HogeShell extends AppShell
{
 
    public function startup()
    {
        parent::startup();
        $this->HogeController = new HogeController();
    }
 
    public function cleanup()
    {
        $this->out($this->HogeController->cleanup());
    }

コマンドラインで実行できるかチェック。

php ./app/Console/cake.php hoge creanup

動いたらcrontabに追加。

00 * * * * php /var/www/html/project/app/Console/cake.php hoge cleanup

参考: CakePHP コントローラのメソッドをシェルで実行する方法 : アシアルブログ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする