ホームページ  >  記事  >  バックエンド開発  >  PHP は、ディレクトリを走査し、指定されたファイル内の指定されたコンテンツを削除する機能を実装します。_PHP チュートリアル

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

WBOY
WBOYオリジナル
2016-07-13 10:09:32867ブラウズ

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)) ブレーク;
$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("ファイルの書き換えに失敗しました");
}
}

関数トラバース($path) {
グローバル $name,$tmpfiledir;
$current_dir = opendir($path); //opendir() はディレクトリハンドルを返し、失敗した場合は false を返します
if($current_dir == false)
false を返します;
While(($file = readdir($current_dir)) !== false) { //readdir() は、開いているディレクトリ ハンドルのエントリを返します
$sub_dir = $path . DIRECTORY_SEPARATOR . $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"]);
「成功」をエコーする;
リンクを解除($tmpfiledir);
}
それ以外は
{
echo "

関連情報を入力

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




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

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

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

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/945702.html技術記事 php は、ディレクトリをトラバースし、指定されたファイル内の指定されたコンテンツを削除することを実現します。今、私は冬休みが終わったようで、静かな寮に座っています。今日投稿したのは、冬休み中に行った最後の勉強です。 ..
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。