MinEMemO

【PHP】ディレクトリにあるファイルを削除する関数

📝 更新日:2020-11-26 / 📄 作成日:2020-11-25
Hero Image
目次

はじめに

ファイルを削除する関数を書いたので載せておきます。

ファイル、ディレクトリを操作するメソッドはいろいろありますが、今回はis_Dot()がつかえる、DirectoryIteratorクラスを使っています。

引数で以下の設定ができます。

  • 削除対象のフォルダパス
  • 削除対象の拡張子
  • 〇日前のファイルを削除対象とするか

パスがファイルの場合に条件を満たせば削除し、パスがフォルダなら再帰処理を行い配下のフォルダまですべて処理を行います。

なお、$pathに渡したフォルダのパスのファイルが削除対象になります。

ご利用の際は動作確認を行ったうえで、自己責任でお願いします。
ファイルを消すものなので、テストして慎重に使ってください

コード

php
<?php
/**
 * $day日前より古い+$exの拡張子のファイルを対象に$pathフォルダから削除する
 * 
 * @param {string} $path フォルダのパス
 * @param {array} $ex 配列に含まれる拡張子を削除対象とする
 * @param {int} $day $day日前より古いファイルを削除対象とする 
 *
 * ※$path = 'folderPath'に削除したいファイルがあるフォルダを指定してください。
*/
function fileDelete($path = 'folderPathを指定する' ,$ex = array('csv') ,$day = 7){
  //dirがある、$exが配列、$exの値がある、$dayが整数だったら処理開始
  if(is_dir($path) && is_array($ex) && count($ex) !== 0 && is_int($day)){
    $date = new DateTime();
    $dayAgo = $day->modify('-'.$day.'days')->getTimestamp();//確認するときは ->format(Y-m-d H:i:s) すると日時でみれます

    $dir = new DirectoryIterator($path);
    foreach ($dir as $file) {
      //. と .. は無視する
      if(!$file->isDot()){

        //ファイルの時の処理
        if($file->isFile()){
          //$dayAgoより古い & 対象の拡張子のファイルを削除
          if($file->getMTime() < $dayAgo  && in_array($file->getExtension(),$ex,true)){
            unlink($file->getPathname());
          }
        }

        //ディレクトリの時の処理
        if($file->isDir()){
          fileDelete($file->getPathname());//ディレクトリなら再帰処理
        }
      }
    }
  }
}
profile_icon
taka
プログラマー
いつでも転職希望の業務経験7年目(2023時点)のエンジニアです。 仕事の合間にすこしずつ転職活動はしていますが、条件が合う場合ぜひTwitterなどでご連絡頂けると嬉しいです。 希望条件は基本的に残業は1日x1h程度。収入は一旦現状維持。 ある程度で構わないので、保守運用が管理されていて、精神的に安心して働ける環境が良いです。 経験言語はHTML、CSS、javascript、PHP、MySQL、Docker、Vuejs、Laravel このブログは完全に自作で静的ジェネレータで作りました。 この範囲で言えば React.js Gatsby.js GraphQLも経験があります。 最近はAIがどう社会に受け入れられ、日常になっていくのかの行く末が気になっています。 今までの人生で一番変化を感じて不思議な感覚です。