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 相关文章推荐
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
两款万能的php分页类
Nov 12 PHP
详解 PHP加密解密字符串函数附源码下载
Dec 18 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 PHP
PHP Include文件实例讲解
Feb 15 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 PHP
PHP安全之register_globals的on和off的区别
Jul 23 PHP
php中数组最简单的使用方法
Dec 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
第六节 访问属性和方法 [6]
2006/10/09 PHP
默默小谈PHP&amp;MYSQL分页原理及实现
2007/01/02 PHP
PHP自定义函数收代码
2010/08/01 PHP
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
php如何获取Http请求
2020/04/30 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
jquery tab标签页的制作
2010/05/10 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
js实现开关灯效果
2020/03/30 Javascript
Javascript中的this,bind和that使用实例
2019/12/05 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
实习报告评语
2014/04/26 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers
Python字符串常规操作小结
2022/04/03 Python
SQL Server 中的事务介绍
2022/05/20 SQL Server