PHPプログラムのバグなどにより、Webサーバー上にできてしまった、消せないファイルを消すための、PHPプログラムです。
先日、自作のPHPプログラムを作っていたとき、そのPHPプログラムにバグがあり、ファイルに書き出すつもりだった文字列を名前にしたファイルが、Webサーバー上にできてしまいました。
しかも、その文字列には、改行文字などの、プログラムを制御するための文字が含まれていたため、普段使っているFTPクライアントを始め、コマンドラインのFTPクライアントや、レンタルサーバーが用意してくれているWeb操作のFTPクライアントでも、そのファイルにアクセスすることができませんでした。
なので、これはもう、レンタルサーバーの管理者に依頼して、そのファイルを消してもらうしかないと思ったのですが、、、
ふと、PHPプログラムで作られたファイルなら、PHPプログラムで消せるかもと思い作ったのが、このPHPプログラムの原型になります。
結果、私の環境では問題なく動き、目的を達成してくれましたので、同じようなトラブルでお困りの人のために、このPHPプログラムに、簡単なインタフェースを付けて、配布させてもらいますが、、、
ただ、いかんせん、個人が個人のために作ったPHPプログラムですので、様々な環境でのテストはできていません。
なので、あくまで各自の責任のもとで使っていただきたいのですが、もし動作や操作に問題があるようでしたら、できる限り改善したいと思いますので、
サポートまで、ご連絡頂けたらと思います。
1 以下のソースコードをコピーして、PHPファイルにペーストし、適当な名前(deletefile.phpなど)で保存してください。
2 PHPファイルを、復旧したいファイルと同じディレクトリに入れてください。
3 Webブラウザーから、PHPファイルにアクセスしてください。
4 消せないファイルを消したいときは5以降を、消せないファイルの名前を変えたいときは7以降を実行してください。
5 消したいファイルの下にある『デリート』ボタンを押してください。
※確認などは表示されませんので、大切なファイルを消さないように、よく確認してから、ボタンを押してください。
※消したいファイルがディレクトリの場合、そのディレクトリの中のファイルも同時に消えます。
6 ファイルが消えます。9以降を実行してください。
7 名前を変えたいファイルの下にあるテキストフィールドに、新しいファイル名を入力して、『リネーム』ボタンを押してください。
8 ファイルの名前が変わります。9以降を実行してください。
9 さらに、同じディレクトリに、復旧したいファイルがあるときは、4以降を実行してください。
10 PHPファイルを消してください。
<?php
if(array_key_exists("renamefile",$_POST))
{
if(array_key_exists("newfilename",$_POST)&&$_POST["newfilename"]!="")
{
rename(mb_decode_numericentity($_POST["filename"],array(0,0x10FFFF,0,0x10FFFF)),$_POST["newfilename"]);
}
}
elseif(array_key_exists("deletefile",$_POST))
{
deletefile(mb_decode_numericentity($_POST["filename"],array(0,0x10FFFF,0,0x10FFFF)));
}
print "<!DOCTYPE html>";
print "<html lang=ja>";
print "<head>";
print "<meta charset=UTF-8>";
print "<title>";
print "Webサーバー上の消せないファイルを消す";
print "</title>";
print "</head>";
print "<body>";
$files=scandir('.');
$color=0;
$index=0;
while($index<count($files))
{
if($files[$index]!='.'&&$files[$index]!='..')
{
print "<form method=post>";
print "<input type=hidden name=filename value=".htmlspecialchars(mb_encode_numericentity($files[$index],array(0,0x10FFFF,0,0x10FFFF))).">";
if($color==0)
{
print "<div style=margin:0.5%;padding:1%;background-color:#eee;>";
}
else
{
print "<div style=margin:0.5%;padding:1%;background-color:#ddd;>";
}
print "<div>";
print $files[$index];
print "</div>";
print "<div>";
print "<input type=text name=newfilename>";
print "<button type=submit name=renamefile>";
print "リネーム";
print "</button>";
print "</div>";
print "<div>";
print "<button type=submit name=deletefile>";
print "デリート";
print "</button>";
print "</div>";
print "</div>";
print "</form>";
$color=($color+1)%2;
}
$index=$index+1;
}
print "</body>";
print "</html>";
function deletefile($filename)
{
if(is_dir($filename))
{
$files=scandir($filename);
$index=0;
while($index<count($files))
{
if($files[$index]!='.'&&$files[$index]!='..')
{
deletefile($filename.'/'.$files[$index]);
}
$index=$index+1;
}
rmdir($filename);
}
else
{
unlink($filename);
}
}
?>・初版
・ファイルを消すだけでなく、ファイルの名前を変えることもできるようにしました。これにより、ファイルを消さずに、復旧できるようになりました。
・ファイルリストに、色や余白を付けて、見やすくしました。
このPHPプログラムは、あくまで各自の責任のもとで使っていただきたいのですが、もし動作や操作に問題があるようでしたら、できる限り改善したいと思いますし、また、各種お問い合わせに対しても、できる限りお応えしたいと思いますので、、、
ご意見、ご質問、ご要望などありましたら、ブログのコメントか、Emailにて、ご連絡頂けたらと思います。