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 相关文章推荐
apache rewrite_module模块使用教程
Jan 10 PHP
PHP 工厂模式使用方法
May 18 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
比较好用的PHP防注入漏洞过滤函数代码
Apr 11 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
请离开include_once和require_once
Jul 18 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
May 04 PHP
深入浅析Yii admin的权限控制
Aug 31 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
Apr 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
PHP入门速成(2)
2006/10/09 PHP
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
PHP时间和日期函数详解
2015/05/08 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
javaScript产生随机数的用法小结
2018/04/21 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
小程序转发探索示例
2019/02/19 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
[01:23]一分钟告诉你 DOTA2为什么叫信仰2
2014/06/20 DOTA
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
在Python的web框架中配置app的教程
2015/04/30 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
python中metaclass原理与用法详解
2019/06/25 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
linux系统都有哪些运行级别
2012/04/15 面试题
业务副厂长岗位职责
2014/01/03 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
家长会主持词开场白
2015/05/29 职场文书
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers