Home  >  Article  >  Backend Development  >  How to traverse files in php and delete specified characters

How to traverse files in php and delete specified characters

藏色散人
藏色散人Original
2021-03-12 10:20:162334browse

The implementation method of php traversing files to delete specified characters: first create a PHP sample file; then delete the specified string in all specified files in the specified directory through the "function del($getstr){...}" method That’s it.

How to traverse files in php and delete specified characters

The operating environment of this article: windows7 system, PHP7.1 version, DELL G3 computer

php implements traversing the directory and deleting the specified file Specified content in

This article mainly introduces the implementation of PHP to traverse the directory and delete the specified content in the specified file. The tool implemented in this article can be used to delete one-sentence Trojans on the server. Friends who need it can refer to it. Next

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 the time after that has been Watching One Piece now.

I once wrote a directory traversal and file copying program in C language, which was very long and complicated. Now you can use PHP to traverse the directory, 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.

The code is as follows:

<?php
 //功能:删除指定目录(包括子目录)下所有指定文件中指定字符串
 $tmpfiledir = $_SERVER["DOCUMENT_ROOT"].&#39;tmp.txt&#39;;
 function del($getstr)
 {
  $isbak = true; //是否备份原文件,true为备份,false不备份
  global $tmpfiledir;
  $fr = fopen($tmpfiledir,"r") or die(&#39;未能打开临时文件&#39;);
  while($row = fgets($fr))
  {
   if(empty($row)) break;
   $row = trim($row);
   $opp = fopen($row,"r") or die("未能打开$row");
   $str = fread($opp,filesize($row)) or die("不能读$row");
   $str = str_replace($getstr,"",$str);
   fclose($opp);
   if($isbak){
    copy($row,$row.&#39;.bak&#39;) or die("备份文件失败");
    }
   $ref = fopen($row,"w") or die("重新打开文件失败");
   fwrite($ref,$str) or die("重新写入文件失败");
  }
 }
 
  function traverse($path) {
    global $name,$tmpfiledir;
   $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false
   if($current_dir == false)
    return false;
   while(($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目
    $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径
    if($file == &#39;.&#39; || $file == &#39;..&#39;) {
     continue;
    } else if(is_dir($sub_dir)) {    //如果是目录,进行递归
     traverse($sub_dir);
    } else {    //如果是文件,再做比较
     $fileinfo = pathinfo($sub_dir);
     if($fileinfo[&#39;basename&#39;] == $name)
     {
       $fopen = fopen($tmpfiledir,"a");
       fwrite($fopen,$sub_dir."\r\n");
       fclose($fopen);
      }
    }
   }
   return true;
  }
 
  if(isset($_POST["name"]) && isset($_POST["dir"]) && isset($_POST["str"]))
  {
    $name = $_POST["name"];
    traverse($_POST["dir"]) or die("未能创建临时文件,请检查网站根目录是否可写");
    del($_POST["str"]);
             echo "成功";
    unlink($tmpfiledir);
   }
   else
   {
     echo "<p>输入相关信息</p>";
    }
?>
<form name="input" action="" method="post">
输入目标文件夹:<input type="text" name="dir"/>
输入目标文件名:<input type="text" name="name"/>
输入需要删除的字符串:<input type="text" name="str" />
<input type="submit" value="提交" />
</form>

How to traverse files in php and delete specified characters

You can see that I wrote two functions. The function traverse writes the specified file path found in a temporary file. Here, the function del deletes the specified strings in these files. In fact, I also think it is useless, just delete it directly during traversal, and there is no need to generate 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 then I simply changed the traversal The file was also written 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.

[Recommended learning: "PHP Video Tutorial"]

The above is the detailed content of How to traverse files in php and delete specified characters. For more information, please follow other related articles on the PHP Chinese website!

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