MinEMemO
🏷️「PHP 」Tag 記事一覧(3 posts)
【PHP】ディレクトリにあるファイルを削除する関数

2020-11-25

はじめに ファイルを削除する関数を書いたので載せておきます。 ファイル、ディレクトリを操作するメソッドはいろいろありますが、今回はis_Dot()がつかえる、DirectoryIteratorクラスを使っています。 引数で以下の設定ができます。 削除対象のフォルダパス 削除対象の拡張子 〇日前のファイルを削除対象とするか パスがファイルの場合に条件を満たせば削除し、パスがフォルダなら再帰処理を行い配下のフォルダまですべて処理を行います。 なお、 $pathに渡したフォルダのパスのファイルが削除対象 になります。 ご利用の際は動作確認を行ったうえで、自己責任でお願いします。 ファイルを消すものなので、テストして慎重に使ってください 。 DirectoryIterator クラス https://www.php.net/manual/ja/class.directoryiterator.php コード 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 ( ) ) ; //ディレクトリなら再帰処理 } } } } }
【PHP】データの連番確認と、抜け番またはMAX+1を生成する関数

2020-06-04

はじめに データベースから持ってきた数字のデータをチェックし、「抜け番」または「MAX+1」を生成する関数を作成しました。 作成環境のPHPが5.3系だったので、コードは5.3系で動くものになっています。 何か不整合があれば教えてください。 またご利用の際は、ご自身でしっかりチェックを行い、自己責任でご利用をお願いいたします。 コード PHP /** サンプルデータ* DBなどから取得したりする流れになると思いますが、処理中に最後の番号を参照するので、昇順できちんとソートしましょう。*/ $numData = array ( 1 , 2 , 4 , 5 ) ; /*** 新規番号を抜け番 or MAX+1で発行する* @param {array} $numData DBや何かしら持ってきたNoのデータ配列* @return {number} 抜け番 or MAX+1*/ function issueNo ( $numData ) { $maxIdx = count ( $numData ) - 1 ; $range = range ( 1 , $numData [ $maxIdx ] ) ; //1~データの最後のNoで連番の配列を作成 foreach ( $range as $idx => $rangeNo ) { if ( $rangeNo !== $numData [ $idx ] ) return $rangeNo ; //抜け番を返して終了 } //MAX+1を返して終了 return $numData [ $maxIdx ] + 1 ; } 処理結果 抜け番があるデータを処理した場合 例えば array(1,2,4,5); をこの関数に渡し処理した場合は 抜け番の「3」がリターン されます。 抜け番がないデータを処理した場合 例えば array(1,2,3,4,5); のようなデータを処理すると MAX+1の「6」がリターン されます。 解説 ポイントはrangeです。 PHP $range = range ( 1 , $numData [ $maxIdx ] ) ; rangeで今回作成される配列は 1~取得データのMAX値の連番の配列 になります。 rangeで作成した連番の配列と取得したデータの数字の配列を比較する ことで、連番かどうかを確認しています。 以上です。 慣れないうちは頭で処理を想像するのが大変かもしれませんが、作っていれば慣れていくので大丈夫です
profile_icon
taka
プログラマー
いつでも転職希望の業務経験7年目(2023時点)のエンジニアです。 仕事の合間にすこしずつ転職活動はしていますが、条件が合う場合ぜひTwitterなどでご連絡頂けると嬉しいです。 希望条件は基本的に残業は1日x1h程度。収入は一旦現状維持。 ある程度で構わないので、保守運用が管理されていて、精神的に安心して働ける環境が良いです。 経験言語はHTML、CSS、javascript、PHP、MySQL、Docker、Vuejs、Laravel このブログは完全に自作で静的ジェネレータで作りました。 この範囲で言えば React.js Gatsby.js GraphQLも経験があります。 最近はAIがどう社会に受け入れられ、日常になっていくのかの行く末が気になっています。 今までの人生で一番変化を感じて不思議な感覚です。