php实现遍历目录并删除指定文件中指定内容


Posted in PHP onJanuary 21, 2015

现在正坐在安静的寝室里,寒假俨然已经离我而去了……今天发的是我寒假里搞的最后一次学习,之后的时间就一直在看海贼王了。

以前写过一个C语言的遍历目录+复制文件的程序,很长很复杂,现在用PHP一样可以实现遍历目录,而代码就短了不少。这个程序目的是遍历目录,找到所有指定文件名的文件,并删除其中指定的字符串。

<?php

 //功能:删除指定目录(包括子目录)下所有指定文件中指定字符串
 $tmpfiledir = $_SERVER["DOCUMENT_ROOT"].'tmp.txt';

 function del($getstr)

 {

  $isbak = true; //是否备份原文件,true为备份,false不备份

  global $tmpfiledir;

  $fr = fopen($tmpfiledir,"r") or die('未能打开临时文件');

  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.'.bak') 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 == '.' || $file == '..') {

     continue;

    } else if(is_dir($sub_dir)) {    //如果是目录,进行递归

     traverse($sub_dir);

    } else {    //如果是文件,再做比较

     $fileinfo = pathinfo($sub_dir);

     if($fileinfo['basename'] == $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>

php实现遍历目录并删除指定文件中指定内容

你们可以看到我写了两个函数,函数traverse将查找到的指定文件路径写在一个临时文件里,函数del删除这些文件里的指定字符串。其实我也觉得很鸡肋,直接在遍历的时候删除就可以了,根本不用生成什么临时文件。

其实我一开始是用C语言写好的遍历,因为C语言不好对文件操作所以才用php写删除的部分,所以一开始只写了一个del函数,后来干脆把遍历文件也用php写了(似乎比C简单的多),所以又写了一个函数traverse。大家只管看遍历的部分就成,也可以和我之前用C写的遍历的代码对比(我发了源代码的),看看有什么不同。

不过这个版本不支持通配符,所以文件名必须要指定。作用嘛(也是我写这个的理由),可以批量删除我们挂在服务器上的一句话木马。

PHP 相关文章推荐
PHP版自动生成文章摘要
Jul 23 PHP
PHP输入流php://input介绍
Sep 18 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
php中 $$str 中 &quot;$$&quot; 的详解
Jul 06 PHP
为你总结一些php信息函数
Oct 21 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
Codeigniter的一些优秀特性总结
Jan 21 #PHP
PHP 生成N个不重复的随机数
Jan 21 #PHP
PHP 实现判断用户是否手机访问
Jan 21 #PHP
PHP中imagick函数的中文解释
Jan 21 #PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 #PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 #PHP
PHP中让curl支持sock5的代码实例
Jan 21 #PHP
You might like
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
微信公众号开发之微信公共平台消息回复类实例
2014/11/14 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
2012/09/19 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
2020/07/31 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
Python运算符重载用法实例分析
2015/06/01 Python
Python代码实现KNN算法
2017/12/20 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
python写入文件自动换行问题的方法
2019/07/05 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
《小草和大树》教学反思
2014/02/16 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
MySQL七种JOIN类型小结
2021/10/24 MySQL