Home  >  Article  >  Backend Development  >  PHP implements traversing the directory and deleting the specified content in the specified file, _PHP tutorial

PHP implements traversing the directory and deleting the specified content in the specified file, _PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:09:32821browse

php implements traversing directories and deleting specified content in specified files,

I am sitting in a quiet dormitory now, and the winter vacation seems to have left me... What I posted today is the last study I did during the winter vacation, and I have been watching One Piece since then.

I used to write a C language program that traverses directories + copies files. It was very long and complicated. Now I can use PHP to traverse directories, and the code is much shorter. The purpose of this program is to traverse the directory, find all files with the specified file name, and delete the specified string.

Copy code The code is as follows:

//Function: Delete the specified string

in all specified files in the specified directory (including subdirectories)

$tmpfiledir = $_SERVER["DOCUMENT_ROOT"].'tmp.txt';
function del($getstr)
{
$isbak = true; //Whether to back up the original file, true means backup, false does not back up
global $tmpfiledir;
$fr = fopen($tmpfiledir,"r") or die('Failed to open temporary file');
while($row = fgets($fr))
{
If(empty($row)) break;
$row = trim($row);
$opp = fopen($row,"r") or die("Failed to open $row");
$str = fread($opp,filesize($row)) or die("Cannot read $row");
$str = str_replace($getstr,"",$str);
fclose($opp);
if($isbak){
​ copy($row,$row.'.bak') or die("Backup file failed");
}
$ref = fopen($row,"w") or die("Failed to reopen file");
fwrite($ref,$str) or die("Failed to rewrite file");
}
}

function traverse($path) {
Global $name,$tmpfiledir;
$current_dir = opendir($path); //opendir() returns a directory handle, and returns false
on failure if($current_dir == false)
Return false;
while(($file = readdir($current_dir)) !== false) { //readdir() returns an entry in the open directory handle
$sub_dir = $path . DIRECTORY_SEPARATOR . $file; //Build subdirectory path
If($file == '.' || $file == '..') {
Continue;
} else if(is_dir($sub_dir)) { //If it is a directory, perform recursion
Traverse($sub_dir);
} else { //If it is a file, compare again
$fileinfo = pathinfo($sub_dir);
If($fileinfo['basename'] == $name)
{
         $fopen = fopen($tmpfiledir,"a");
          fwrite($fopen,$sub_dir."rn");
           fclose($fopen);
}
}
}
Return true;
}

if(isset($_POST["name"]) && isset($_POST["dir"]) && isset($_POST["str"]))
{
$name = $_POST["name"];
Traverse($_POST["dir"]) or die("Failed to create temporary file, please check whether the website root directory is writable");
del($_POST["str"]);
                                                    echo "success";
​ unlink($tmpfiledir);
}
else
{
echo "

Enter relevant information

";
}
?>

Enter the target folder:
Enter the target file name:
Enter the string to be deleted:

You can see that I wrote two functions. The function traverse writes the found specified file paths in a temporary file, and the function del deletes the specified strings in these files. In fact, I also think it is useless. I can just delete it during traversal without generating any temporary files at all.

Actually, I wrote the traversal in C language at the beginning. Because C language is not easy to operate files, I used PHP to write the deleted part. So I only wrote a del function at the beginning, and later I simply used it to traverse files. I wrote it in PHP (seems much simpler than C), so I wrote another function traverse. You can just look at the traversal part. You can also compare it with the traversal code I wrote in C before (I sent the source code) to see what the difference is.

However, this version does not support wildcards, so the file name must be specified. Its function (also the reason why I wrote this) is that it can delete the one-sentence Trojans we have hung on the server in batches.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/945702.htmlTechArticlephp implements traversing the directory and deleting the specified content in the specified file. Now I am sitting in a quiet dormitory, and the winter vacation is already over Left me... What I posted today is the last study I did during the winter vacation...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn