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之COOKIE支持详解
Sep 20 PHP
PHP下常用正则表达式整理
Oct 26 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
Dec 31 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
May 02 PHP
PHP的PDO错误与错误处理
Jan 27 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
Session保存到数据库的php类分享
2011/10/24 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
Javascript中的apply()方法浅析
2015/03/15 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
vue构建单页面应用实战
2017/04/10 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
2017/12/11 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
vue.js项目 el-input 组件 监听回车键实现搜索功能示例
2018/08/25 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
用python制作游戏外挂
2018/01/04 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
python对象销毁实例(垃圾回收)
2020/01/16 Python
python实现简单颜色识别程序
2020/02/19 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
为什么需要版本控制
2016/10/28 面试题
中专生自我鉴定范文
2014/02/02 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
期中考试复习计划
2015/01/19 职场文书
创业计划书介绍
2019/04/24 职场文书
Python实现信息管理系统
2022/06/05 Python