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实现Ftp用户的在线管理的代码
Mar 06 PHP
PHP中str_replace函数使用小结
Oct 11 PHP
PHP Document 代码注释规范
Apr 13 PHP
PHP执行linux系统命令的常用函数使用说明
Apr 27 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
php学习笔记 [预定义数组(超全局数组)]
Jun 09 PHP
不使用php api函数实现数组的交换排序示例
Apr 13 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 PHP
Laravel推荐使用的十个辅助函数
May 10 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中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
PHP实现的连贯操作、链式操作实例
2014/07/08 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
document.documentElement &amp;&amp; document.documentElement.scrollTop
2007/12/01 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
Node.js中流(stream)的使用方法示例
2017/07/16 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
JS遍历树层级关系实现原理解析
2020/08/31 Javascript
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
Python第三方库h5py_读取mat文件并显示值的方法
2019/02/08 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
祖国在我心中演讲稿
2014/01/15 职场文书
向女朋友道歉的话
2015/01/20 职场文书
商务邀请函
2015/01/30 职场文书