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世纪万年历
Dec 06 PHP
php简单封装了一些常用JS操作
Feb 25 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
php 常用类整理
Dec 23 PHP
php方法调用模式与函数调用模式简例
Sep 20 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
Nov 05 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
php传值和传引用的区别点总结
Nov 19 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
Feb 15 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
php中通过curl smtp发送邮件
2012/06/05 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
动态表格Table类的实现
2009/08/26 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
利用Python实现图书超期提醒
2016/08/02 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
Overload和Override的区别
2012/09/02 面试题
电信专业应届生自荐信
2013/09/28 职场文书
大学生四年生活自我鉴定
2013/11/21 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
如何写求职信
2014/05/24 职场文书
双拥工作宣传标语
2014/06/26 职场文书
最新离婚协议书范本
2014/08/19 职场文书
闪闪红星观后感
2015/06/08 职场文书
孟佩杰观后感
2015/06/17 职场文书
创业计划书之面包店
2019/09/17 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL