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速度全攻略
Oct 09 PHP
PHP中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
php递归列出所有文件和目录的代码
Sep 10 PHP
使用php判断浏览器的类型和语言的函数代码
Feb 28 PHP
CI框架中zip类应用示例
Jun 17 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 PHP
总结对比php中的多种序列化
Aug 28 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
PHP strripos函数用法总结
Feb 11 PHP
PHP实现cookie跨域session共享的方法分析
Aug 23 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
第十一节 重载 [11]
2006/10/09 PHP
文件上传的实现
2006/10/09 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
php实现无限级分类
2014/12/24 PHP
php ImageMagick windows下安装教程
2015/01/26 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
2016/10/13 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
JS实现仿微信支付弹窗功能
2018/06/25 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
python读写二进制文件的方法
2015/05/09 Python
python文本数据相似度的度量
2018/03/12 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
python实现图片转字符画
2021/02/19 Python
浅析python连接数据库的重要事项
2021/02/22 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
新浪网技术部笔试题
2016/08/26 面试题
自荐书范文
2013/12/08 职场文书
购房协议书
2014/04/11 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL
Docker下安装Oracle19c
2022/04/13 Servers