PHPを使ってサーバー上のファイルを日付指定で削除する方法

PHPでファイル操作をするときによく使うのが削除処理です。

画像やPDFをアップロードしたけどやっぱり削除したいときや、ログファイルを1週間すぎたものから削除するなど。

ファイルを削除する関数 unlink()

ファイルの削除には unlink() を使います。

unlink($削除するファイルのパス)

$削除するファイルのパスは、相対パスでもいけます。

 

実際に削除してみましょう。

上のコードは、このコードが書かれたPHPファイルと同じディレクトリ内に images というディレクトリがあり、その中にある neko03.jpg という猫の画像を削除しています。

まとめてファイル削除する方法

まとめて削除はワイルドカード使って

で出来そうですが、出来ませんでした(笑)

 

指定したディレクトリ内のファイル全て削除する場合は、glob() を使って一覧を取得してループしながら削除します。

glob()の使い方は次の記事を参照。

≫ PHPで指定したディレクトリ内のファイル名とディレクトリ名一覧取得

is_file() でファイルかどうかを判定していますが、unlink() はディレクトリの削除には対応していないためです。

ディレクトリを指定しちゃうとエラーが吐き出されます。

 

拡張子を指定して一覧を取得したりすれば確実にファイルなので is_file() は不要です。

日付を比較して削除する方法

日付を比較して削除する場合は、まず基準となる日付を取得し、ファイルの日付を取得します。

両方の日付のフォーマットを比較して条件にマッチすれば削除します。

えらそうにサンプルコード載せましたが、テストしてないです!

たぶん想定通り動くと思うんですけど自己責任で使ってください。

ファイルが削除できないとき

ファイルが削除できないエラーが出たときは、80%は削除対象のファイルを開いていたりしている場合です。

fopen() とかでファイル開いたあとクローズしているかチェックしてください。

あとはパーミッションで権限が無い場合です。

それか条件が間違ってて削除処理にたどり着いてないかです。

この3つで大抵解決できると思います。

まとめ

PHPでファイルを削除するときは unlink() を使います。

ファイルの削除が対象で、ディレクトリの削除はできません。

まとめて削除にワイルドカードなんかは使えないので glob() をうまく使って対象のファイルを抽出してください。

コロナの影響でみんな大変だから俺もなんかできること

僕は福井県に住んでいるのですが、戦時中に福井大空襲にあい、その直後に大震災にあってボロボロになった話をおばあちゃんに聞きました。

それでも復活することができ、不死鳥の町と言われるようになりました。

先人達には心から感謝し尊敬します。

リーマンショック、東日本大震災、コロナと数十年に一度と言われる被害が立て続けに起きていますが、僕たちは強いです。

今は苦しいかもしれませんがきっと復活できます。

僕は低学歴ですし小さな小さな粒でしかないですが、プログラミングに関しては必死に勉強し15年以上ごはんにありつけています。

プログラミングを勉強している人の役に立てるほどのスキルはあると思っています。

なので1人でもんもんと悩んでいる若手のエンジニア向けに質問を受け付けることにします。

自宅で待機されている間もパソコンとインターネットがあればプログラミングの勉強はできます。

  • PHP
  • SQL
  • HTML・CSS
  • jQuery

とは言ってもいきなり答えを聞いていたのではなかなか成長できないと思うのです。

なので質問の際には次のことをご連携ください。

  • 何をやりたいか
  • どんなことを調べたか、検索キーワードと参考にしたページのURL
  • 調べた結果どこが分からないか
  • できるなら試したコード

メッセージいはとりあえずTwitterにでもください。

質問はこちら

すぐに返事できないかもしれませんがご了承ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA