FTPクライアントでファイルが削除できなくなったとき

レンタルサーバ内を整理していたら、やってしまいました。FTPクライアントソフトで何回削除をかけても消えないファイル&ディレクトリ(フォルダ)が…。パーミッションの問題かと思い変更してみてもNG。どうやら以前サーバにインストールしていたシステムが吐き出した(作成した)ファイルとディレクトリみたいで、オーナーがApacheになっていました。レンタルサーバ側の提供しているウェブ版のFTPツールを使ってもダメ。こりゃどうしたもんでしょう。

FFFTPの設定を変えれば削除できるときもあるみたいですが(FTPクライアントで削除できないファイル-hereticanthem)、うちの環境ではうまくいかなかったので、色々探し回ったところ、ようやく解決策が見つかりました。phpで削除コマンドを書き、それをアップロードして走らせてやろうという試みです。

色々読んだ挙句、phpの関数“rmdir”を使うのですが、この関数は基本的にディレクトリを削除する関数で、ディレクトリ内にファイルやサブディレクトリがあると働いてくれないらしいので、さらに込み入った構文にする必要があります。
幸い、phpリファレンスの“rmdir”の欄に、ディレクトリ以下のファイルをすべて削除できるコードが書き込まれていましたので、それをアレンジして使ってみることにしました。

<?php
//以下を例えば”rm.php”などの名前で保存してアップロードする
//当該phpファイルを消したいディレクトリと同じ階層におく場合
rrmdir('./消したいディレクトリ名')

 function rrmdir($dir) {
   if (is_dir($dir)) {
     $objects = scandir($dir);
     foreach ($objects as $object) {
       if ($object != "." && $object != "..") {
         if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
       }
     }
     reset($objects);
     rmdir($dir);
   }
 }
?>

以上のコードのソース…PHPマニュアル / CC-BY3.o

以上で見事に消えました。(かなり試行錯誤したので、たぶんあっていると思うのですがちょっと自信がありません。もし間違っていたらご指摘ください)

どうしても消えないという場合は、レンタルサーバ管理者に言えば削除してくれると思います。

コメント