こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
PHPエンジニアとして9年~の経験があります。
さて、PHPでディレクトリを削除したいこと、結構あると思います。処理の最後に処理し終わったファイルを削除したい。
これの実現方法として、LinuxコマンドをPHPプログラム上で実行させるものがあります。
ディレクトリ削除コマンド実行
$delCommand = "rm -rf " . 削除したいファイルパス+削除したいディレクトリ
// $delCommand = "rm -rf /tmp/test"; みたいな。
exec($delCommand);
これで跡形もなく削除!linuxコマンドを実行させているだけ!
zip やunzipもコマンドで
PHPライブラリ使ってーっていうやり方あるみたいだけど、それもまた面倒だからコマンド実行する。
$command = "unzip " . 解凍するzipファイルパス+解凍するzipファイル名 . " -d " . 解凍したい場所
// $command = "unzip /tmp/test.zip -d /tmp/"; みたいな。
exec($command);
削除処理系で気を付けるべきは、もう本当になんの慈悲もなく削除するから、間違えてパスを指定しないように気を付けることです。
そう、本当に慈悲もなんもない。間違えて必要なものを削除しないように気を付けてください。
execが使えない環境もある
サーバーによりコマンド実行ができなくなっている場合もあります。そういうときは潔く諦めた方がいいですね。自分でサーバーの環境を変えられるなら別ですが…
もし環境の変更外で試してみる価値があるものとしては、権限回りとパーミッションです。
- PHPを実行しているユーザーにexecを使用できる権限があるか。
- パーミッションがそのユーザーに実行できるものか
この2点が怪しいです。
ただ、私はまだそういった環境に出会ったことがないので詳しくは記述できません。悪しからず…
phpで書く場合
これをphpで全部書こうとすると
ディレクトリから中身を一つずつ見ていって、
最下層まで行ってファイルを削除してからディレクトリを削除して…
ということを順に書いていかなければなりません。
とにかく…面倒すぎるんです。長いんです。途中で処理も間違えそうなくらい。
書いたこともあるけど面倒すぎる。しかもなぜかたまに失敗して残ってしまうこともあって…。
※ログ取ってるわけじゃなかったから理由はわかりません
コマンドを直接使える環境の場合はこの実装方法を試してみると良いと思います。