【EC-CUBE4】バッチ処理で仮アップロード画像を削除

EC-CUBE EC-CUBE

EC-CUBE4で商品画像の仮アップロード画像が残ってしまうのが気になったので、定期的に削除するバッチを作成しました。

仕組みは単純で、アップロードから◯日以上経った画像を削除するというものです。
(スクラッチでもよく作りますが、今回はEC-CUBE4での実装です)

なぜ◯日以上なのかは、(cron動かすのは大抵夜中なのでないとは思いますが)たまたま商品登録してた場合に仮アップロード画像が消えてしまうのを避けるためです。

EC-CUBE4でのバッチ処理の基本的な作り方はこちらから

<?php

namespace Customize\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Filesystem\Filesystem;

/**
 * 仮アップロード画像(/upload/temp_image/)内の画像を削除する
 */
class TempImageRemoveCommand extends Command
{
    protected static $defaultName = 'eccube:customize:temp_image-remove';

    public function __construct(

    ) {
        parent::__construct();
        // 今回は3日以上経ったものを削除対象にします
        $this->deleteLastDate = -3;
    }

    protected function configure()
    {
        $this
            -gt;setDescription('Temp Image remove');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {

        // パスは環境に合わせてください。
        $tempImageDirPath = "/upload/temp_image/";

        $lastDate = date("Y-m-d", strtotime("{$this->deleteLastDate} day"));

        // 対象はJPG PNG GIF
        $images = glob($tempImageDirPath . '{*.jpg,*.jpeg,*.png,*.gif}', GLOB_BRACE);

        $fs = new Filesystem();

        foreach ($images as $image) {

            // タイムスタンプを日付のフォーマットに変更
            $fileTimestamp = date("Y-m-d", filemtime($image));

            // ◯日より前の画像なら削除
            if($fileTimestamp < $lastDate) { $fs->remove($image);
            }
        }
    }
}

これでcronなどで毎日夜中に動かしてやればいらない画像が削除できます。
(稼働中の本番サーバでは慎重にやってください。画像が消えちゃうとかなり面倒なので…)

正直、仮アップロード画像は残していてもゴミデータですので、定期的に消してやると容量を圧迫することもなくなるはずです。

タイトルとURLをコピーしました