ホームページ >php教程 >php手册 >PHP は、ディレクトリを走査し、指定されたファイル内の指定されたコンテンツを削除する処理を実装します。

PHP は、ディレクトリを走査し、指定されたファイル内の指定されたコンテンツを削除する処理を実装します。

WBOY
WBOYオリジナル
2016-06-16 09:16:36846ブラウズ

php は、ディレクトリを走査し、指定されたファイル内の指定されたコンテンツを削除する機能を実装します。

私は今静かな寮に座っていて、冬休みが忘れてしまったようです...今日投稿したのは冬休み中に行った最後の勉強であり、それ以来ずっとワンピースを見ています。

以前は、ディレクトリを走査してファイルをコピーする C 言語プログラムを作成していましたが、これは非常に長くて複雑でした。今では、PHP を使用してディレクトリを走査できるようになり、コードが大幅に短縮されました。このプログラムの目的は、ディレクトリを走査し、指定されたファイル名を持つすべてのファイルを検索し、指定された文字列を削除することです。

コードをコピー コードは次のとおりです:


//機能: 指定されたディレクトリ (サブディレクトリを含む) 内の指定されたすべてのファイル内の指定された文字列

を削除します。

$tmpfiledir = $_SERVER["DOCUMENT_ROOT"].'tmp.txt';
関数 del($getstr)
{
$isbak = true; //元のファイルをバックアップするかどうか、true はバックアップを意味し、false はバックアップしません
グローバル $tmpfiledir;
$fr = fopen($tmpfiledir,"r") または die('一時ファイルを開けませんでした');
while($row = fgets($fr))
{
If(empty($row)) Break;
$row = トリム($row);
$opp = fopen($row,"r") または die("$row を開けませんでした");
$str = fread($opp,filesize($row)) または die("$row を読み取れません");
$str = str_replace($getstr,"",$str);
fclose($opp);
if($isbak){
copy($row,$row.'.bak') または die("バックアップ ファイルが失敗しました");
}
$ref = fopen($row,"w") または die("ファイルを再度開くことができませんでした");
fwrite($ref,$str) または die("ファイルの書き換えに失敗しました");
}
}

関数 traverse($path) {
グローバル $name,$tmpfiledir;
$current_dir = opendir($path); //opendir() はディレクトリ ハンドルを返し、失敗した場合は false
を返します。 if($current_dir == false)
false を返します;
while(($file = readdir($current_dir)) !== false) { //readdir() は、開いているディレクトリ ハンドルのエントリを返します
$sub_dir = $path . $file ; // サブディレクトリのパスを構築します。 If($file == '.' || $file == '..') {
続行;
} else if(is_dir($sub_dir)) { //ディレクトリの場合は再帰を実行
トラバース($sub_dir);
} else { //ファイルの場合は再度比較します
$fileinfo = pathinfo($sub_dir);
If($fileinfo['basename'] == $name)
{
$fopen = fopen($tmpfiledir,"a");
fwrite($fopen,$sub_dir."rn");
Fclose ($ fopen)
}
}
}
true を返します;
}

if(isset($_POST["name"]) && isset($_POST["dir"]) && isset($_POST["str"]))
{
$name = $_POST["名前"];
Traverse($_POST["dir"]) または die("一時ファイルの作成に失敗しました。Web サイトのルート ディレクトリが書き込み可能かどうか確認してください");
del($_POST["str"]);
echo "成功";
unlink($tmpfiledir);
}
それ以外
{
echo "

関連情報を入力

";
}
?>
<フォーム名="入力" アクション="" メソッド="投稿">
対象のフォルダーを入力します:
対象のファイル名を入力してください:
削除する文字列を入力してください:


関数 traverse は、見つかった指定されたファイル パスを一時ファイルに書き込み、関数 del はこれらのファイル内の指定された文字列を削除します。実際、私もこれは無駄だと思います。トラバーサル中に直接削除するだけでよく、一時ファイルを生成する必要はまったくありません。

実は最初はC言語でトラバースを書いたのですが、C言語はファイル操作が難しいので、削除した部分だけPHPを使って書きました。これをファイルのトラバースに使用しました (C よりもはるかに単純なようです) PHP で作成したので、別の関数トラバースを作成しました。トラバーサル部分だけを見て、以前に C で書いたトラバーサル コード (ソース コードを送信しました) と比較して、違いを確認することもできます。

ただし、このバージョンではワイルドカードがサポートされていないため、ファイル名を指定する必要があります。その機能 (これを書いた理由でもあります) は、サーバー上にハングした 1 文のトロイの木馬をバッチで削除できることです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。