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 实现多服务器共享 SESSION 数据
Aug 15 PHP
apache mysql php 源码编译使用方法
May 03 PHP
php笔记之:AOP的应用
Apr 24 PHP
php动态添加url查询参数的方法
Apr 14 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
Yii2创建控制器(createController)方法详解
Jul 23 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
浅谈PHP5.6 与 PHP7.0 区别
Oct 09 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中使用Oracle数据库(3)
2006/10/09 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
jQuery select控制插件
2009/08/17 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
jQuery查找节点方法完整实例
2016/09/13 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
jQuery实现二级导航菜单的示例
2020/09/30 jQuery
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
python中uuid模块实例浅析
2020/12/29 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
介绍一下Java中的static关键字
2012/05/12 面试题
简历中的自我评价怎么写
2014/01/29 职场文书
教育技术职业规划范文
2014/03/04 职场文书
节约电力资源的建议书
2014/03/12 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis