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 相关文章推荐
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
详解WordPress中给链接添加查询字符串的方法
Dec 18 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 PHP
php函数式编程简单示例
Aug 08 PHP
PHP网站常见安全漏洞,及相应防范措施总结
Mar 01 PHP
PHP 实现重载
Mar 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
在node中如何使用 ES6
2017/04/22 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
jQuery选择器之基本选择器用法实例分析
2019/02/19 jQuery
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
微信小程序用户登录和登录态维护的实现
2020/12/10 Javascript
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
python图片合成的示例
2020/11/09 Python
sort命令的作用和用法
2013/08/25 面试题
生物技术专业研究生自荐信
2013/09/22 职场文书
四下基层实施方案
2014/03/28 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
大学校园招聘会感想
2015/08/10 职场文书