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
プログラマー
2017年11月から業務でPHPを触りだしたエンジニアです。 業務経験8年程度。 2022年から「要求整理→設計→実装→テスト→リリース」と開発のステップをきちんと経験したく、 様々な会社を経験しました。 現職が自社案件枯渇、本社エリア以外のSES案件の繋がりがなしと急に発覚し、 26/05から急遽強制的に転職活動中。 現職をやめるつもりはなかったし、転職は本当に最後にしたいのでもしよければお声がけください。 【GitHub コードサンプル】 https://github.com/tm-qc - Docker、MVC、CRUD、認証、テストなどのサンプルコード(Laravel、ASP.NET CORE) - 経験PJ詳細まとめ